gpt4 book ai didi

Java多线程——等待条件和释放所有线程

转载 作者:行者123 更新时间:2023-11-30 08:27:47 24 4
gpt4 key购买 nike

我有一个相对简单的问题要解决,即我想让所有线程等待某个条件发生然后继续。可以用下面的代码来解释:

void doSth(){ //shared by multiple threads
...
if(!conditionMet())
await();

//procceed further
resetCondition()
}

我不想使用锁定和条件,因为它似乎没有必要。 CountDownLatch 会很完美,但我必须重置闩锁,而且 CyclicBarrier 也不起作用,因为我不知道有多少线程需要调用 await。此外,当信号被发送到等待线程时,它们都应该被释放并继续。你们会如何处理这个问题?

最佳答案

我推荐Phaser

I have no idea how many threads need to call await.

对于每个最终需要等待的线程,调用 phaser.register() [register 不等待,它告诉 phaser 期望另一个线程等待或触发屏障]

CountDownLatch would be perfect, but I have to reset the latch

线程完成后,调用 phaser.arriveAndAwaitAdvance()。那时,所有线程都将在那里等待,直到 number of threads registered == number of threads arrived

关于Java多线程——等待条件和释放所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20635844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com