核心:
缓冲区
模型分析
-
生产者--->多线程(有多个操作)
-
消费者--->多线程
-
缓冲区--->并发容器(JUC包下已经提供了)--->操作商品
功能
-
缓冲区需要实现什么功能
-
需要并发什么操作
-
并发存--->什么时候可以存(容器不够时,需要等待)
-
并发取--->什么时候可以取(里面有数据,就可以取。空容器,进行等待。等待生产)
-
wait同样是阻塞的一种,但是会释放锁。
当notify或者notifyAll被调用的时候线程就进入了可运行状态
有资源的锁定和数组越界问题
package iostudy.threadcooperation;
import java.util.stream.Stream;
/**
* 协作模型:生产者---消费者方式一:
* 管程法
* @since JDK 1.8
* @date 2021/6/21
* @author Lucifer
*/
public class CoTestNo1 {
public static void main(String[] args) {
/*先创建缓冲区*/
SynContainer container = new SynContainer();
/*生产者*/
new Productor(container).start();
/*消费者*/
new Consumer(container).start();
}
}
/**
* 多线程生产者
*/
class Productor extends Thread{
/*对缓冲区进行操作*/
SynContainer container;
/*添加构造器*/
public Productor(SynContainer container){
super();
this.container = container;
}
/*重写run方法*/