0

It is possible to build wait/notify mechanism only with syncronized blocks in Java? It means to create this mechanism with out wait()/notify() methods but using syncronized blocks, static fields, volatile modificator.

4

1 回答 1

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

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

于 2013-05-24T18:40:58.767 回答