我需要同步多个线程。我不创建线程,但我知道有多少线程。所以我写了这个内部保护 block :
private class Guard {
int waiters = 0;
boolean wait;
synchronized void addWaiter() {
++waiters;
wait = true;
while (wait && waiters != threadNum()) {
try {
wait();
} catch (InterruptedException e) {}
}
waiters = 0;
wait = false;
notifyAll();
}
}
这个 protected block 在循环中执行。所以问题是,在第一次调用的所有线程从 wait() 循环中释放之前,它可能会被第二次调用,这显然会搞乱守卫的整个逻辑。所以我需要让线程在从防护中释放之前以某种方式加入。有这方面的设计吗?完成它的最优雅的方式是什么。请记住,这些线程不是我创建的。
谢谢。
最佳答案
听起来像是 CountDownLatch 的工作。您可以将锁存器设置为等待 N 次倒计时。有关示例,请参阅 Javadoc。
关于java - 带连接的保护 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580118/