java - 仅使用同步块(synchronized block)构建 wait()/notify() 机制

标签 java concurrency wait synchronized notify

是否可以仅使用Java中的同步块(synchronized block)构建等待/通知机制?这意味着创建这种机制时不使用 wait()/notify() 方法,而是使用同步块(synchronized block)、静态字段、 volatile 修饰符。

最佳答案

当然可以,但是由于您等不及,您将被迫忙循环:

 public class Signal {

     private boolean signal;

     public void waitForSignal() {
          while (true)
               sychronized (this) {
                    if (signal) {
                        signal = false;
                        break;   
                    }
               }
           }
     }

     public synchronized void notifyWithSignal() {
          signal = true;
     }
}

很粗糙,但基本上就是等待/通知背后的内容。只是它不循环等待,而是使用操作系统将CPU交给另一个线程,直到信号变为真。

可以通过将“信号”声明为 volatile 并删除同步块(synchronized block)来完成相同的操作。或者使用 AtomicBoolean 作为信号。

关于java - 仅使用同步块(synchronized block)构建 wait()/notify() 机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741453/

相关文章:

非 volatile 对象中的java volatile 对象

java - Selenium + Java |改善等待时间

java - Junit - 测试对 obj.wait() 的调用

java - Hibernate:session.load 与 session.get

java - Google 云端硬盘 SDK 异常

Java流将数组收集到一个列表中

java - 如何从另一个线程中唤醒一个线程?

java - 如何使用反射访问对象中的字段值

java - 我应该始终使我的 java 代码线程安全,还是出于性能原因仅在需要时才这样做?

java - Hystrix:提高命令的 maxSemaphoreCount?