一、生产者消费者类
private Queue<Integer> queue = new LinkedList<>();
private int maxSize=5;
private ReentrantLock lock = new ReentrantLock();
private Condition producerCondition = lock.newCondition();
private Condition consumerCondition = lock.newCondition();
public void produce()throws InterruptedException{
lock.lock();
try{
while(queue.size()==maxSize){
producerCondition.await();
}
int item=(int)(Math.random()*100);
queue.add(item);
System.out.println("Produced item"+ item);
consumerCondition.signal();
}finally {
lock.unlock();
}
}
public void consume()throws InterruptedException{
lock.lock();
try{
while(queue.isEmpty()){
consumerCondition.await();
}
int item=queue.remove();
System.out.println("Consumed item = " + item);
producerCondition.signal();
}finally {
lock.unlock();
}
}
二、单元测试类
public class TestProducerConsumer {
public static void main(String[] args) {
ProducerConsumer producerConsumer = new ProducerConsumer();
Runnable producerTask = () -> {
try {
while (true) {
producerConsumer.produce();
Thread.sleep(1000); // 生产者休眠一秒
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
Runnable consumerTask = () -> {
try {
while (true) {
producerConsumer.consume();
Thread.sleep(1000); // 消费者休眠一秒
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
Thread producerThread = new Thread(producerTask);
Thread consumerThread = new Thread(consumerTask);
producerThread.start();
consumerThread.start();
}
}