Thread线程之 多生产者与多消费者模拟生产消费
来源:互联网 发布:软件测试计划实例 编辑:程序博客网 时间:2024/05/16 07:09
Thread 线程经典示例之多生产者 多消费者
- 要求多个生产者进行生产 多个消费者进行消费
- 其间的生产和消费实现同步
- 如果库存超过20则生产等待消费继续
- 如果消费少于0则消费暂停生产继续
方法摘要
- wait();不想要此线程进行暂时等待
- notifyAll();通知此对象监视器上等待的所有线程
- Thread.sleep();线程进行休眠指定时间数
代码实现如下
此模块实现主线程中创建两个生产者对象 两个消费者线程对象
public static void main(String[] args) { Clerk cl = new Clerk(); //创建两个生产者对象并将产品对象作为其构造参数传入供线程调用 Producer pro = new Producer(cl); Producer pro1 = new Producer(cl); //创建两个消费者对象并将产品对象作为其构造参数传入供线程调用 Consumer con = new Consumer(cl); Consumer con1 = new Consumer(cl); //创建两个生产者线程对象并就绪 new Thread(pro,"生产者甲 ").start(); new Thread(pro1,"生产者甲 ").start(); //创建两个消费者线程对象并就绪 new Thread(con,"消费者A ").start(); new Thread(con1,"消费者B ").start();}
此代码快实现生产者线程
class Producer implements Runnable{
private Clerk clerk;public Producer(Clerk clerk){ this.clerk=clerk;}@Overridepublic void run() { while(true){ //调用已经实现了同步的生产方法 clerk.addProduct(); }}}
此代码快实现消费者线程
class Consumer implements Runnable{
private Clerk clerk;public Consumer(Clerk clerk){ this.clerk=clerk;}@Overridepublic void run() { while(true){ //调用已经实现了同步的消费方法 clerk.sellProduct(); }}}
此代码快实现产品类其中封装了同步的生产和消费方法
class Clerk{int product = 0;//产品的库存量/** * 供生产者生成产品使用 * * 每次调用此方法,相当于 生产者生产 */public synchronized void addProduct(){//默认锁对象 this(同步方法) if (product>=20) { //不需要继续生成,先等待 try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { //可以生成 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"生成了1个产品,目前库存是:"+(++product)); notifyAll();//唤醒 所有此对象监视器上的等待线程 }}/** * 供消费者消费产品使用 * * 每次调用此方法,相当于 消费者消费 * */public synchronized void sellProduct(){//默认锁对象 this (同步方法) if (product<=0) {//目前没有库存,先等待 try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"消费了1个产品,目前库存是:"+(--product)); notifyAll();//通知此对象监视器上等待的所有线程 }}}
0 0
- Thread线程之 多生产者与多消费者模拟生产消费
- 生产消费模型-多生产者vs多消费者
- 生产者与消费者模型(基于单链表、环形队列、多线程、多消费多生产)
- thread之消费者与生产者
- java线程模拟生产者与消费者
- java线程之生产与消费
- java线程之生产与消费
- 初学java:生产者与消费者随机多数量生产与消费
- java线程经典之生产者与消费者
- java线程之生产者与消费者模式
- 线程生产者与消费者
- 线程---生产者与消费者
- 线程之“生产者消费者”
- 线程之生产者消费者
- 线程之生产者、消费者
- C#线程模拟生产者消费者
- 编写一个多线程程序,模拟2个生产者生产产品,3个消费者消费产品。2个生产者不停的生产商品3个消费者不停的消费产品。
- java线程(2)——模拟生产者与消费者
- NS-3 源码修改--实现tcp数据包特征(大小和间隔)服从特定分布
- launchMode和Flag
- C++封装的日期和时间类
- MySQL之——提升Replication性能的两种架构方式
- LCD12864串行与并行的比较分析
- Thread线程之 多生产者与多消费者模拟生产消费
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(4)创建多维钻取分析
- linux系统负载load average的含义
- Android与JS的交互(上)
- 消息邮箱及其操作_读书笔记_7
- 内核中的kmalloc函数详解
- 安卓apk反编译、修改、重新打包、签名全过程
- XML约束
- leetcode学习篇七——Find Minimum in Rotated Sorted Array