A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-10-6 16:06  /  205 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package demo;

  2. public class ProducerAndConsuDemo {

  3.         /**
  4.          * 模拟生产者和消费者
  5.          */
  6.         public static void main(String[] args) {
  7.                 Resource r = new Resource();
  8.                 for(int i = 1;i<4;i++){
  9.                         new Thread(new Pro(r)).start();
  10.                         new Thread(new Consu(r)).start();
  11.                 }

  12.         }

  13. }
  14. class Resource{
  15.         private String name;
  16.         private int count = 0;
  17.         private boolean flag = false;
  18.        
  19.         public void produce(){
  20.                 synchronized(this){
  21.                         while(flag){
  22.                                 try {
  23.                                         Thread.sleep(10);
  24.                                         this.wait();
  25.                                 } catch (InterruptedException e) {
  26.                                         e.printStackTrace();
  27.                                 }
  28.                         }
  29.                         count++;
  30.                         System.out.println(Thread.currentThread().getName()+"...生产"+count);
  31.                         flag = flag^true;
  32.                         this.notifyAll();
  33.                 }
  34.         }
  35.         public void sell(){
  36.                 synchronized(this){
  37.                         while(!flag){
  38.                                 try {
  39.                                         Thread.sleep(50);
  40.                                         this.wait();
  41.                                 } catch (InterruptedException e) {
  42.                                         e.printStackTrace();
  43.                                 }
  44.                         }
  45.                         System.out.println(Thread.currentThread().getName()+"...消费"+count);
  46.                         flag = flag^true;
  47.                         this.notifyAll();
  48.                 }
  49.         }
  50. }
  51. class Pro implements Runnable{
  52.         private Resource r;

  53.         public Pro(Resource r) {
  54.                 super();
  55.                 this.r = r;
  56.         }

  57.         @Override
  58.         public void run() {
  59.                 while(true){
  60.                         r.produce();
  61.                 }
  62.         }
  63. }
  64. class Consu implements Runnable{
  65.         private Resource r;

  66.         public Consu(Resource r) {
  67.                 super();
  68.                 this.r = r;
  69.         }

  70.         @Override
  71.         public void run() {
  72.                 while(true){
  73.                         r.sell();
  74.                 }
  75.         }
  76. }
复制代码

1 个回复

倒序浏览
  1. Thread-0...生产1
  2. Thread-5...消费1
  3. Thread-4...生产2
  4. Thread-3...消费2
  5. Thread-2...生产3
  6. Thread-1...消费3
  7. Thread-2...生产4
  8. Thread-3...消费4
  9. Thread-4...生产5
  10. Thread-5...消费5
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马