博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现生产者和消费者模式
阅读量:6940 次
发布时间:2019-06-27

本文共 6733 字,大约阅读时间需要 22 分钟。

hot3.png

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

package sunhuaili;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

/**

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

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

 * 

 *  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

你可能感兴趣的文章
day10--进程
查看>>
结构训练
查看>>
查询数据库保存成CSV格式
查看>>
enumerate
查看>>
PHP三元运算符 isset的理解
查看>>
dede织梦:文章内容页调用
查看>>
开发中常用的 25 个JavaScript 单行代码
查看>>
phh7 安装redis扩展
查看>>
也许你一直「坚持」不下去,是缺少这个前提
查看>>
终端的实用命令行
查看>>
根据一定高度或宽度返回宽度或高度
查看>>
面向对象复习日志二:Traits
查看>>
excel批量导入规则验证
查看>>
汇编学习pushl, popl
查看>>
daspect([m n p])
查看>>
【NOIP】提高组2016 天天爱跑步
查看>>
leetcode 322. Coin Change
查看>>
QRCode 二维码开源DLL(源码修改为支持中英文混合)
查看>>
ITBOOK在线阅读-TOOLFK工具网
查看>>
周记1
查看>>