Condition控制线程通信
Condition可以用来控制线程间的通信,与wait、notify和notifyAll
方法对应的分别是await、signal和sinalAll
上篇文章中的生产者消费者采用的是 synchronized
和对象的wait
和notifyAll
方法,可以采用Lock锁
结合condition
来代替,具体代码如下:
依然是修改Clerk类
class Clerk{
private int product = 0;
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
//进货方法
public void get()
{
lock.lock();
try {
while (product>=10){
System.out.println("产品已满!无法添加");
try {
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+":"
+ ++product);
condition.signalAll();
}
finally {
lock.unlock();
}
}
//卖货方法
public void sale()
{
lock.lock();
try {
while (product<=0