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. 我已经喜欢上了Python
  2. linux resin mysql_Linux下Resin JSP MySQL的安装和配置-2
  3. 某央企程序员炫耀:央企研发岗才是性价比天花板!955,不卷不裁,6险2金,500元单身公寓!...
  4. 15支持哪些数据库版本 tfs_我司虚拟主机支持脚本及数据库版本一览表
  5. Flask初识,第五篇 ,做一个用户登录之后查看学员信息的小例子
  6. pq 中m函数判断嵌套_压轴题的热点,二次函数与几何的结合,谁会谁吃香
  7. Java-重载和重写的区别
  8. 关于SubSonic3.0生成的表名自动加复数(s)的“用户代码未处理SqlException,对象名'xxxs'无效”异常处理...
  9. JavaScript定位页面元素属性(满满的干货)
  10. Python必知必会:Classethod与Staticmethod方法
  11. linux AWK中正则表达式
  12. python 搭建web_理解python web开发,轻松搭建web app!
  13. FPGA数字时钟计数器
  14. 苹果id退不出来显示连接服务器,退出苹果id显示尚未连接互联网
  15. SEO网站收录情况分析查询方法(小技巧Tips)
  16. candence的图纸大小设置_关于无法修改图纸大小的问题
  17. 第07章 文本信息提取
  18. gogs mail 配置(邮件服务器使用自颁发证书)
  19. 如何使用苹果官方文档
  20. 第十届蓝桥杯C语言B组题解

热门文章

  1. SyntaxError: invalid syntax的问题原因和解决办法
  2. Verilog 中输入输出信号的类型?
  3. 2018.11.06-知识回顾
  4. 分布式系统数据一致性解决方案
  5. redis cluster集群选主
  6. S1系统相关-uptime命令总结(S代表系统相关,1代表第一个命令)
  7. mysql 监控工具
  8. 《Android应用开发》——1.3节配置Eclipse
  9. 程序员如何写出更好的代码
  10. 4、Python —— 函数