仅使用synchronized块构建wait()/ notify()机制

时间:2013-05-24 18:31:17

标签: java concurrency wait synchronized notify

只能在Java中使用同步块构建等待/通知机制吗?这意味着使用wait()/ notify()方法创建此机制,但使用同步块,静态字段,易变修改器。

1 个答案:

答案 0 :(得分:1)

当然可以,但由于你迫不及待,你将被迫忙于循环:

 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交给另一个线程,直到信号变为真。

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