java - 可复位倒计时锁存器
问题描述
我有一个想解决的问题。我有一个线程必须等待多个可变数量的异步线程完成它们的执行完成,然后,它必须执行并再次保持等待状态,直到其他线程完成它们的执行。
例子:
线程 A 一直等到线程 B 和 C 完成它们的执行。之后必须执行线程 A 并且其他线程应该等待。这是一个重复n次的循环。
ThreadA{
public void run(){
while(true){
if(queue.peek() % 2 == 0){
phaser.arriveAndAwaitAdvance();
doStuff();
}
}
}
}
ThreadB{
public void run(){
while(true){
if(queue.peek() % 2 == 0){
doStuff();
phaser.arrive();
}
}
}
}
线程 C 具有与线程 B 相同的伪代码。
我需要同步这样的东西:线程 A 必须仅在线程 B 和线程 C 执行它们的执行之后执行,并且线程 B 和线程 C 必须等待线程 A 完成其执行。
我尝试使用上面代码中提到的 Phaser 和 Phaser,但我没有得到预期的结果。
有人可以举个例子吗?
我正在使用 Java 8,并且正在寻找可重置形式的 CountDownLatch,可能使用移相器。
解决方案
推荐阅读
- git - Rebase 或 squash 以“隐藏”嵌套分支上已经合并的提交?
- python - Pandas 中数值数据的 One-Hot 编码
- python-3.x - 在Python中的特定窗口框架(如15秒)中从心跳'* .wav'格式中提取心率
- python - 如何上传文件或丢失的目录
- google-apps-script - 在多个共享的 google word 文档中自动添加某些文本和表格
- javascript - Lodash 设置整数路径奇怪的行为
- java - Jenetics:如何解释并得到染色体的结果?
- c - 如何在 C 编程中生成具有特定区域附加特定数字的矩阵?
- azure-cognitive-search - ComplexType:根据内部数据分析进行查询
- android - 更新通知操作的正确方法