多线程下生产者消费者模式
1.什么是生产者—消费者模型?生产者+消费者+阻塞队列
它可以用来解决:
- 1.生产与消费速度不匹配的问题;
- 2.软件开发过程中解耦。
阻塞情况 | 唤醒情况 |
---|---|
1.队列已满,阻塞生产者 | 1.队列不满,唤醒生产者 |
2.队列已空,阻塞消费者 | 2.队列不空,唤醒消费者 |
2.wait()/notify()实现
注意:阻塞时只能用wait()方法,不能用sleep()方法,因为此时不释放锁。假设队列为空,那么消费者sleep,此时消费者不释放锁,那么生产者拿不到锁就不能生产,队列一直是空,则消费者一直sleep().形成死锁。
1.阻塞队列
import java.util.*;
public class BlockQueue {
1.维护的队列
private Queue queue;
2.队列最大容量
private int capacity;
public BlockQueue(int capacity) {
this.queue = new LinkedList();
this.capacity = capacity;
}
生产者方法 加sychronized锁,是为了防止多生产者造成的线程安全
public synchronized void produce(int i) throws InterruptedException{