生产者消费者程序可使用多种方法实现,有使用synchronized关键字,Lock对象,semaphore同步工具。今天用synchronized实现时碰到两个问题,一个是报 IllegalMonitorStateException ,另一个是碰到死锁。死锁暂时解决不了。
生产者消费者有一个生产者一个消费者及多个生产者多个消费者。
一个生产者一个消费者
package cn.bj.demo.spring.javaevent.pc.sync;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* 生产者消费者,假设有个传送带,生产者往传送带上放产品,消费者从传送带上取产品
*
* */
public class ProducerAndConsumer {
private static int MAX_SIZE = 2; //传送带上最多能放产品数
private List<Product> products = null; //传送带
private ProducerTask pTask; //生产者任务
private ConsumerTask cTask; //消费者任务
private Producer p; //生产者
public ProducerAndConsumer() {
p = new Producer();
products = new ArrayList<Product>();
pTask = new ProducerTask(p, products);
cTask = new ConsumerTask(products);
Thread pThread = new Thread(pTask);
pThread.setName("producer thread");
pThread.start();
Thread cThread = new Thread(cTask);
cThread.setName("consumer thread");
cThread.start();
try {
Thread.currentThread().join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("construct is over");
}
public static void main(String[] args) {
ProducerAndConsumer pac = new ProducerAndConsumer();
}
class ProducerTask implements Runnable {
private Producer producer;