生产者消费者模式
生产者生产数据到缓冲区中,消费者从缓冲区中取数据。如果缓冲区已经满了,则生产者线程阻塞;如果缓冲区为空,那么消费者线程阻塞
资源
class Resource {
int id;
public Resource(int id) {
this.id = id;
}
}
生产者线程
class Producer extends Thread {
int p = 1;
@Override
public void run() {
while (true) {
try {
Resource resource = new Resource(p++);
System.out.println("生产资源" + resource.id);
ProducerConsumer.queue.put(resource);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者线程
class Consumer extends Thread {
@Override
public void run() {
while (true) {
try {
Resource resource = ProducerConsumer.queue.take();
System.out.println("消费资源" + resource.id);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
测试类
public class ProducerConsumer {
// 阻塞队列
public static BlockingQueue queue = new LinkedBlockingQueue<Resource>(10);
public static void main(String[] args) {
Producer producer = new Producer(); //生产者
Consumer consumer1 = new Consumer(); //消费者1
Consumer consumer2 = new Consumer(); //消费者2
Consumer consumer3 = new Consumer(); //消费者3
producer.start();
consumer1.start();
consumer2.start();
consumer3.start();
}
}