在一个锁中使用多个条件(Using multiple conditions in a Lock)
一个Lock可能关联着一个或者多个条件,这些条件表现在Condition接口。这些条件(conditions)的目的是允许多个线程控制一个锁对象并且检查一个条件是真还是假,当一个条件为false时,那么线程将会被挂起,直到其他线程唤醒它;Condition接口提供了挂起一个线程和唤醒一个线程的机制;
在之前的生产者消费者例子中,使用了Lock来同步临界区,生产者和消费者都只有一个线程;在下面的例子中,生产者和消费者都将有多个线程,当缓冲区满时,所有的生产者将会被挂起,消费者负责唤醒生产者;当缓冲区空时,消费者将被挂起,生茶者负责唤醒消费者;
动手实现
(1)创建一个大小固定的队列作为生产者和消费者的缓冲区;
public class MyQueue<T> {
private ReentrantLock lock=new ReentrantLock();
private Condition pullConditon=lock.newCondition();
private Condition pushCondition=lock.newCondition();
private int maxSize;
private LinkedList<