java.util.concurrent.locks.Condition如何工作?
阅读有关java.util.concurrent.locks.Condition如何工作?,java,multithreading,concurrency,locking,java.util.concurrent,Java,Multithreading,Concurrency,Locking,Java.util.concurrent,阅读有关Java.util.concurrent.locks.Condition接口的Java 8文档,给出以下示例: 类边界缓冲区{ 最终锁定=新的可重入锁定(); final Condition notFull=lock.newCondition(); 最终条件notEmpty=lock.newCondition(); 最终对象[]项=新对象[100]; int putptr、takeptr、count; 公共void put(对象x)抛出InterruptedException{ lock
Java.util.concurrent.locks.Condition
接口的Java 8文档,给出以下示例:
类边界缓冲区{
最终锁定=新的可重入锁定();
final Condition notFull=lock.newCondition();
最终条件notEmpty=lock.newCondition();
最终对象[]项=新对象[100];
int putptr、takeptr、count;
公共void put(对象x)抛出InterruptedException{
lock.lock();
试一试{
while(count==items.length)
未满。等待();
项目[putptr]=x;
如果(++putptr==items.length)putptr=0;
++计数;
notEmpty.signal();
}最后{
lock.unlock();
}
}
公共对象take()引发InterruptedException{
lock.lock();
试一试{
而(计数=0)
notEmpty.wait();
对象x=项目[takeptr];
如果(++takeptr==items.length)takeptr=0;
--计数;
notFull.signal();
返回x;
}最后{
lock.unlock();
}
}
}
所以我的主要问题是:条件是如何工作的
notFull.await()
例如)signal()
a状态,从而唤醒其他线程signal()
现在条件满足了,如果等待缓冲区未满的线程未释放锁,则释放锁wait/signal/signalAll
的行为实际上与wait/notify/notifyAll
信号
或信号所有
时,它分别释放一个线程或所有线程,等待相应的条件
,这样该线程或这些线程将有资格再次获得锁。但是现在锁仍然由调用signal
或signalAll
的线程拥有,直到它通过调用lock.unlock
显式释放锁为止。然后,已经释放/已经释放的线程将能够再次尝试获取锁,能够获取锁的线程将能够再次检查条件(在本例中,条件是指count==items.length
或count==0
),如果正常,它将继续,否则它将再次等待并释放锁,使其可用于另一个线程