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
。使用1
cdl=new CountDownLatch(1)
初始化,等待线程将调用阻塞方法
cdl.await()
,而通知线程将调用
cdl.countDown()

您必须创建新的
CountDownLatch
对象,因为它没有重置方法。值得记住的是,在您的情况下,访问此变量的所有方法都是同步的,所以不会有问题


或者,您可以使用
CyclicBarier
,然后所有线程都将调用
cb.await()
。使用线程数对其进行初始化,然后方法
wait
将阻塞,直到有两个线程在等待,并且只让这两个线程继续执行。

java.util.concurrent
提供高级并发

CountDownLatch
将解析您的查询

请像上课一样复习一下