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