多线程----生产者消费者
来源:互联网 发布:交友约会软件 编辑:程序博客网 时间:2024/06/07 15:28
// 生产者class Factory { private List<Integer> array; private int index = 1; public Factory(List<Integer> array) { this.array = array; } public void create() { new Thread(new Runnable() { @Override public void run() { while (true) { synchronized (array) { try { Thread.sleep(200); if (array.size() == 1) { array.wait(); } else { array.add(index); System.out.println(Thread.currentThread().getId() + "--生产:" + index); index++; array.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } } }).start(); }}// 消费者class Customer { private List<Integer> array; public Customer(List<Integer> array) { this.array = array; } public void get() { new Thread(new Runnable() { @Override public void run() { while (true) { synchronized (array) { try { Thread.sleep(200); if (array.size() == 0) { array.wait(); } else { System.out.println(Thread.currentThread().getId() + "--获取:" + array.get(0)); array.remove(0); array.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } } }).start(); }}public static void main(String[] args) { List<Integer> list = new ArrayList<>(); Factory factory = new Factory(list); Customer customer = new Customer(list); factory.create(); customer.get();}
会出现成产一个,消费一个交替运行的情况。当调用方法改成了:
public static void main(String[] args) { List<Integer> list = new ArrayList<>(); Factory factory = new Factory(list); Customer customer = new Customer(list); for (int i = 0; i < 5; i++) { factory.create(); customer.get(); }}
则有可能运行一段时间就出现假死的情况,解决办法:将notify方法换成notifyAll
0 0
- java多线程 消费者-生产者
- 生产者消费者问题--多线程
- 多线程之生产者-消费者
- java多线程 消费者-生产者
- java 多线程 生产者消费者
- JAVA [ 多线程 -- 生产者消费者 ]
- 多线程--生产者消费者问题
- 生产者-消费者多线程实现
- 多线程练习----生产者消费者
- 多线程生产者和消费者
- 多线程_生产者消费者
- Java 多线程-生产者、消费者
- 多线程-生产者消费者
- 多线程-生产者消费者
- 多线程---生产者与消费者
- 生产者消费者多线程
- 多线程之生产者消费者
- java多线程--生产者消费者
- caffe中的matlab读取均值文件imagenet_mean.binaryproto
- nginx模块
- 建造者模式-Builder Pattern 复杂对象的组装与创建——建造者模式(二):游戏角色设计的建造者模式解决方案
- golang time 包 常用函数
- 【JVM】垃圾回收算法与内存分配策略
- 多线程----生产者消费者
- Unity 获取摄像机的视口区域
- PHP7 和 ECMAScript 新特性
- centos 6.6 yum安装mysql 5.7.16
- xcode编译出现AFNetworking.framework did not have a CFBundleIdentifier in its Info.plist
- 从0开始学习 GITHUB 系列之「GIT 速成」
- AAC家族命名
- 最全面的Xcode 8 带来的新特性。
- PAT乙级(C++)1021-1025