Java 使特定线程等待状态';s计数器达到0
我使用HashMap来跟踪每个状态的计数器,并试图让某些调用相同状态块的线程等待(状态),直到状态计数器为0。每个线程使用递减计数器(状态S),然后调用wait(状态S) 我曾考虑过向锁中添加一个条件,但我认为这没有意义,因为我可能有两组不同的线程在两个计数器上等待,当一个线程对其中一个计数器使用signalAll()时,它会唤醒两组线程。 如有任何提示,将不胜感激 注意:计数器在代码的另一部分中递增,但不相关 在工作线程中:Java 使特定线程等待状态';s计数器达到0,java,multithreading,Java,Multithreading,我使用HashMap来跟踪每个状态的计数器,并试图让某些调用相同状态块的线程等待(状态),直到状态计数器为0。每个线程使用递减计数器(状态S),然后调用wait(状态S) 我曾考虑过向锁中添加一个条件,但我认为这没有意义,因为我可能有两组不同的线程在两个计数器上等待,当一个线程对其中一个计数器使用signalAll()时,它会唤醒两组线程。 如有任何提示,将不胜感激 注意:计数器在代码的另一部分中递增,但不相关 在工作线程中: private final static Counter c
private final static Counter counter = new Counter();
if (condition) {
counter.decrementCounter(s);
counter.await(s);
}
柜台类别:
public class Counter{
private HashMap<State, Integer> count = new HashMap<State, Integer>();
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private final Lock writeLock = lock.writeLock();
private final Lock readLock = lock.readLock();
public void await(State s) throws InterruptedException {
readLock.lock();
try {
//check if state s counter is 0. if it's not 0 block until it is.
} finally {
readLock.unlock();
}
}
public void decrementCounter(State s) {
writeLock.lock();
try {
int temp = count.get(s);
if (temp > 0) {
count.put(s, temp - 1);
}
} finally {
writeLock.unlock();
}
}
}
公共类计数器{
私有HashMap计数=新HashMap();
私有最终ReentrantReadWriteLock锁=新的ReentrantReadWriteLock();
private final Lock writeLock=Lock.writeLock();
私有最终锁readLock=Lock.readLock();
public void wait(状态s)抛出InterruptedException{
readLock.lock();
试一试{
//检查状态的计数器是否为0。如果它不是0,则阻塞直到它为。
}最后{
readLock.unlock();
}
}
公共无效递减计数器(状态s){
writeLock.lock();
试一试{
int temp=计数获取;
如果(温度>0){
计数放置(s,温度-1);
}
}最后{
writeLock.unlock();
}
}
}
您这样做是作为并行编程的练习吗?在标准库中已经有一个现成的类用于您所描述的内容。是的,我是!谢谢,我来看看。