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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Eagle 高级黑马   /  2014-10-24 13:24  /  1087 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //producer:生产者,制片人        consumer:消费者,用户
  2. class ProducerConsumerDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //创建resource对象
  7.                 Resource res = new Resource();
  8.                 //创建producer对象
  9.                 Producer pro = new Producer(res);
  10.                 //创建Consumer对象
  11.                 Consumer con = new Consumer(res);
  12.                 //创建4个线程
  13.                 Thread t1 = new Thread(pro);
  14.                 Thread t2 = new Thread(con);
  15.                 Thread t3 = new Thread(pro);
  16.                 Thread t4 = new Thread(con);
  17.                 //启动四个线程
  18.                 t1.start();
  19.                 t2.start();
  20.                 t3.start();
  21.                 t4.start();
  22.         }
  23. }

  24. //resource:资源
  25. class Resource
  26. {
  27.         //私有的产品名称
  28.         private String name;
  29.         //私有的计数器,产品编号
  30.         private int count = 1;
  31.         //布尔型变量,用于判断线程要执行哪里
  32.         private boolean flag = false;
  33.        
  34.         //加同步锁的set,设置产品名称的方法。
  35.         public synchronized void set(String name)
  36.         {
  37.                 while(true)
  38.                 {
  39.                         //判断flag是否真
  40.         //                if (flag)
  41.                         //while循环判断,当线程被解除冻结后需要回来再判断一次
  42.                         while (flag)

  43.                         {
  44.                                 //wait:等待,把当前线程冻结起来。等待notify(通知,告知)唤醒,notifyAll:唤醒全部线程
  45.                                 try{wait();}catch(Exception e){}
  46.                         }
  47.                         //把传入的name加上计数器赋值给本类的name
  48.                         this.name = name+"+==+"+count++;

  49.                         //打印当前线程name和当前生产者的name
  50.                         System.out.println(Thread.currentThread().getName()+".生产者.SS."+this.name);
  51.                         //把flag的值改为true。
  52.                         flag = true;
  53.                         //唤醒第一个冻结的线程
  54.         //                this.notify();
  55.                         //唤醒所有线程
  56.                         this.notifyAll();
  57.                 }
  58.         }

  59.         //输出函数,输出产品名称和编号
  60.         public synchronized void out()
  61.         {
  62.                 while(true)
  63.                 {
  64.                         //if判断flag是否为false,线程被唤醒后继续执行,不再回来判断
  65.         //                if (!flag)
  66.                         //while循环判断,当线程被解除冻结后需要回来再判断一次
  67.                         while (!flag)
  68.                         {
  69.                                 //flag为false时,线程进入等待状态,没有执行资格,等待唤醒
  70.                                 try{wait();}catch(Exception e){}
  71.                         }
  72.                         //打印当前线程名称和购买者名称
  73.                         System.out.println(Thread.currentThread().getName()+".购买者.GOGOGO."+this.name);
  74.                         //修改flag的值为false;
  75.                         flag = false;;
  76.                         //唤醒最先冻结的线程
  77.         //                this.notify();
  78.                         //唤醒所有线程
  79.                         this.notifyAll();
  80.                 }
  81.         }
  82. }

  83. //创建类producer,实现多线程Runnable接口。
  84. class Producer implements Runnable
  85. {
  86.         //建立resource引用
  87.         private Resource res;
  88.         //初始化引用
  89.         Producer(Resource res)
  90.         {
  91.                 //把引用指向类resource
  92.                 this.res = res;
  93.         }
  94.        
  95.         //复写run方法
  96.         public void run()
  97.         {
  98. //                while(true)
  99. //                {
  100.                         //调用set函数,对产品名称进行设置
  101.                         res.set("雀氏挖掘机");
  102. //                }
  103.         }

  104. }

  105. class Consumer implements Runnable
  106. {
  107.         //建立引用
  108.         private Resource res;
  109.         //初始化
  110.         Consumer(Resource res)
  111.         {
  112.                 //res赋值
  113.                 this.res = res;
  114.         }

  115.         //复写run函数
  116.         public void run()
  117.         {
  118. //                while(true)
  119. //                {
  120.                         //调用out函数。
  121.                         res.out();
  122. //                }
  123.         }
  124. }
复制代码



写完这个,听到毕老师说:啊,这个下节课给你们画图演示一下啊!
到了下节课。只看到画面上画好的一张有着勾勾叉叉的图就在那儿放着。。。。

然后毕老师说:
       这个,咳咳。图已经画好了,你们那个、、心里明白怎么画的啊。。我就不说了
。。。。。。然后毕老师的阴笑声:嘿嘿。。那个,看视频的同学可能不知道,来给你们看一下啊、、。。。。。。。。=====================         0.0  0.0   0.0   0.0   0.0

我闭目深呼吸,抬头,食指指向天空,然后厉声大吼道:毕老师你就可劲坑吧!
:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马