实习第一天,被指派做了一些新人特训,第一天的任务是实现一下消费者生产者模型,简单查阅后,找到几种实现方式:Synchronized、ReentrantLock、BlockingQueue(阻塞队列)、Semaphore(信号量)。
这里主要讲一下第二种,ReentrantLock实现,自JDK1.5引入之后,相对对象锁,它可以为一个锁创建多个等待队列,支持等待时间的设置。
代码实现如下:
仓库类:
package test_2;
import java.util.LinkedList;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Storage2 {
private final int MAX_SIZE=10;
private LinkedList<Object> storage2=new LinkedList<>();
private final Lock lock=new ReentrantLock();
private final Condition full=lock.newCondition();
private final Condition empty=lock.newCondition();
public void produce(){
lock.lock();
while (storage2.size()+1>MAX_SIZE){
System.out.println(