是否可以仅使用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/