2019独角兽企业重金招聘Python工程师标准>>>

1、首先写生产者消费者的类

package sunhuaili;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

/**

* 生产者消费者例子,该程序模拟了一个房屋,房子只能容纳100人 如果房子中没有人,是不会有人从门口出来的

* 如果房子中满了100人,外面的人需要等待屋子里的人走出门口 才能进入 下面开始写代码

*

* @author  sunhuaili

*

*/

public class Door {

private int persons = 0;// 房子中开始是没有人的

private Lock lock = new ReentrantLock();

private Condition empty = lock.newCondition();

private Condition full = lock.newCondition();

public void enter() throws InterruptedException {// 进入一个人

lock.lock();

try {

while (persons == 100) {

full.await();

}

persons++;

System.out.println("进入一个人,当前人数" + persons);

full.signalAll();

} finally {

lock.unlock();

}

}

public void out() throws InterruptedException {

lock.lock();

try {

while (persons == 0) {

empty.await();

}

persons--;

System.out.println("出去一个人,当前人数" + persons);

empty.signalAll();

} finally {

lock.unlock();

}

}

}

2、编写生产者消费者任务

package sunhuaili;

public class EnterTask implements Runnable {

private Door door ;

public EnterTask(Door door){

this.door = door;

}

@Override

public void run() {

try {

door.enter();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package sunhuaili;

public class OutterTask implements Runnable {

private Door door ;

public OutterTask(Door door){

this.door = door;

}

@Override

public void run() {

try {

door.out();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

3、写测试类

package sunhuaili;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class DoorTest {

public static void main(String[] args) {

ExecutorService service =  Executors.newFixedThreadPool(200);

Door door = new Door();

for(int i=0;i<200;i++){

service.execute(new EnterTask(door));

service.execute(new OutterTask(door));

}

service.shutdown();

}

}

4、运行结果

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

进入一个人,当前人数7

出去一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

进入一个人,当前人数6

进入一个人,当前人数7

进入一个人,当前人数8

进入一个人,当前人数9

进入一个人,当前人数10

出去一个人,当前人数9

出去一个人,当前人数8

出去一个人,当前人数7

出去一个人,当前人数6

出去一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

出去一个人,当前人数0

进入一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

进入一个人,当前人数2

进入一个人,当前人数3

出去一个人,当前人数2

进入一个人,当前人数3

进入一个人,当前人数4

出去一个人,当前人数3

进入一个人,当前人数4

进入一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

出去一个人,当前人数4

进入一个人,当前人数5

进入一个人,当前人数6

出去一个人,当前人数5

出去一个人,当前人数4

出去一个人,当前人数3

出去一个人,当前人数2

出去一个人,当前人数1

出去一个人,当前人数0

转载于:https://my.oschina.net/sunhuaili/blog/205230

java实现生产者和消费者模式相关推荐

  1. [Java基础]生产者和消费者模式概述与案例分析

    代码如下: package BoxPack01;public class Box {private int milk;private boolean state = false;public sync ...

  2. Java多线模式-Producer-Consumer模式(生产者、消费者模式)

    1.场景 有些时候需要两个或两个以上的线程协同工作,每个线程需要使用其他线程产生数据. 2.详细说明 可以把上面的场景抽象成生产者和消费者模式.从消费者的角度:消费者需要消费生产者生成的产品. 从生产 ...

  3. Java并发编程系列18:多线程之生产者和消费者模式_信号灯法(wait/notify通知机制)

    1.生产者消费者模式 生产者消费者问题(Producer-consumer problem),也称为有限缓冲问题(Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题 ...

  4. Java基础进阶多线程-生产者和消费者模式

    1.什么是"生产者和消费者模式"? 生产线程负责生产,消费线程负责消费 生产线程和消费线程要达到均衡 这是一种特殊的业务需求,在这种特殊的情况下需要使用wait方法和notify方 ...

  5. 线程间的协作(2)——生产者与消费者模式

    2019独角兽企业重金招聘Python工程师标准>>> 1.何为生产者与消费者 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程. import java.util. ...

  6. 生产者与消费者模式的概念、运用、3种实现

    生产者与消费者模式的概念.运用.3种实现 本文为笔者的学习整理总结,因此,若有任何不严谨或错误之处,还望不吝指教! 内容: 一. 概念 二. 运用 三. 实现1. Sychronized.wait.n ...

  7. 6※、线程同步、同步锁、同步代码块的使用、同步锁释放的时机、ReentrantLock可重入锁、公平锁与非公平锁的区别、什么是死锁、线程间的通信(生产者和消费者模式)

    线程锁 1.※线程的同步:(要确保对象锁是一致的) 1.未使用同步锁的抢票 2.使用了同步锁的抢票 3.线程-同步代码块的使用 4.同步方法和代码块的区别 5.同步锁释放的时机 练习:多线程生产手机 ...

  8. Python中的生产者与消费者模式(转载)

    利用多线程和队列可以实现生产者消费者模式.该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度. 1.什么是生产者和消费者? 在线程世界里,生产者就是生产数据(或者说发布任务)的线程 ...

  9. 生产者、消费者模式实现

    1.1生产和1消费 一个String对象,生产者设定值,消费者拿走值. wait()/notify()实现 生产者 public class Product {private String lock; ...

最新文章

  1. lintcode 中等题:subSets 子集
  2. 数据结构常见算法原理讲解100篇(一)-递归和分治算法原理及案例应用
  3. 海南师范大学计算机设计大赛证书,我校品牌VI设计作品在中国大学生计算机设计大赛海南省赛中获得一等奖...
  4. mysql update field_mysql-更新表与另一个选择,但字段是SUM(someField)
  5. [html] 如何设置打印尺寸?
  6. 腾讯公布5G开放平台全景图,定义12大场景,引入45个应用
  7. 虚拟光驱安装服务器无法运行,Win7新装虚拟光驱无法打开的解决方法
  8. IT计算机实习:JAVA实习报告范文(一)
  9. 【h5py 报错】ImportError: DLL load failed while importing defs: 找不到指定的程序。
  10. 支持iCloud的html文本编辑,人人都可用 iCloud网页版iWork完全开放
  11. 48 款数据可视化分析工具大集合!
  12. From Nand to Tetris Week2 2021 超详细笔记
  13. 首款国产全画幅8K50P广播级摄像机
  14. 【NISP一级】4.1 Windows终端安全
  15. Android 应用开发中国大学生挑战赛
  16. Linux下execl函数与execlp函数的具体详细用法
  17. 我在Github上找到开源的《植物大战僵尸》
  18. 编译原理三大圣书——龙书、虎书、鲸…
  19. VS exe独立程序打包—Enigma Virtual Box
  20. 在线文本编辑器实现原理

热门文章

  1. 江苏专转本全国计算机一级考试成绩查询,江苏“专转本”新规:考生需获计算机一级及以上证书...
  2. Configuration of OpenCV 2.4.7 in VS2012 (X86)
  3. mysql行锁加在什么上_mysql怎么加行锁?
  4. (亲测可行)基于面绘制的MC算法以及基于体绘制的 Ray-casting 实现Dicom图像的三维重建(python实现)
  5. TX Pattern Generator功能块
  6. 如何阅读微控制器数据手册:简介和第一步
  7. FPGA之道(67)代码中的约束信息(四)状态机的相关约束
  8. Win8/Win8.1常见错误代码的解决方法汇总
  9. 完全卸载SQL Server 2008 R2(转)
  10. android控件跟随手势滑动改变位置