Java同步原语
我希望在代码中使用以下类似信号量的同步原语:Java同步原语,java,concurrency,Java,Concurrency,我希望在代码中使用以下类似信号量的同步原语: class Event { private boolean fired = false; public synchronized void fire() { this.fired = true; this.notify(); } public synchronized void waitFor() throws InterruptedException { while
class Event {
private boolean fired = false;
public synchronized void fire() {
this.fired = true;
this.notify();
}
public synchronized void waitFor() throws InterruptedException {
while (!this.fired)
wait();
this.fired = false;
}
}
Java标准库(或其他流行库)中是否有可以使用相同语义的原语
编辑:看来
CountDownLatch
是最好的候选,所以我将接受其中一个答案。尽管我不喜欢这种情况,因为它没有提供清晰的语义,并且缺乏可读性。您可能需要使用CountDownLatch
。使用1cdl=new CountDownLatch(1)
初始化,等待线程将调用阻塞方法cdl.await()
,而通知线程将调用cdl.countDown()
您必须创建新的CountDownLatch
对象,因为它没有重置方法。值得记住的是,在您的情况下,访问此变量的所有方法都是同步的,所以不会有问题
或者,您可以使用
CyclicBarier
,然后所有线程都将调用cb.await()
。使用线程数对其进行初始化,然后方法wait
将阻塞,直到有两个线程在等待,并且只让这两个线程继续执行。java.util.concurrent
提供高级并发
CountDownLatch
将解析您的查询
请像上课一样复习一下?