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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小黑子 于 2014-9-8 15:32 编辑

照着毕老师的视频写的,API我也查了。我的包没导错啊,怎么会提示我lock包不存在呢?问题如图所示。

  1. /*
  2. 练习:线程间的通信—————生产者,消费者
  3.         两个生产者,两个消费者
  4. */
  5. import java.util.concurrent.locks.*;

  6. class Resource
  7. {
  8.         private String name;
  9.         private int count = 0;
  10.         private boolean flag = false;
  11.         
  12.         private Lock lock = new ReentrantLock();
  13.         private Condition condition_pro = new lock.newCondition();
  14.         private Condition condition_con = new lock.newCondition();

  15.         public void set(String name) throws InterruptedException
  16.         {
  17.                 lock.lock();
  18.                 try
  19.                 {                                
  20.                         while(flag)
  21.                                 condition_pro.await();
  22.                         this.name = name+"---"+count++;
  23.                         System.out.println(Thread.currentThread().getName()+":::"+this.name);
  24.                         flag = true;
  25.                                 condition_con.signal();
  26.                 }
  27.                 finally
  28.                 {
  29.                         lock.unlock();
  30.                 }               
  31.                
  32.         }
  33.         public void out() throws InterruptedException
  34.         {
  35.                 lock.lock();
  36.                 try
  37.                 {
  38.                         while(!flag)
  39.                                 condition_con.await();
  40.                         System.out.println(Thread.currentThread().getName()+"~~~~~~"+this.name);
  41.                         flag = false;
  42.                         condition_pro.signal();
  43.                 }
  44.                 catch (InterruptedException e)
  45.                 {
  46.                         lock.unlock();
  47.                 }
  48.                
  49.         }
  50. }

  51. //生产者
  52. class Produc implements Runnable
  53. {
  54.         Resource r;
  55.         Produc(Resource r)
  56.         {
  57.                 this.r = r;
  58.         }
  59.         public void run()
  60.         {
  61.                 while(true)
  62.                 {
  63.                         try
  64.                         {
  65.                                 r.set("曲曲曲");
  66.                         }
  67.                         catch (InterruptedException e)
  68.                         {
  69.                         }
  70.                         
  71.                 }
  72.         }
  73. }

  74. //消费者
  75. class Consum implements Runnable
  76. {
  77.         Resource r;
  78.         Consum(Resource r)
  79.         {
  80.                 this.r = r;
  81.         }
  82.         public void run()
  83.         {
  84.                 while(true)
  85.                 {
  86.                         try
  87.                         {
  88.                                 r.out();
  89.                         }
  90.                         catch (InterruptedException e)
  91.                         {
  92.                         }
  93.                         
  94.                 }
  95.         }
  96. }
  97. class  LockDemo
  98. {
  99.         public static void main(String[] args)
  100.         {
  101.                 Resource r = new Resource();
  102.                 Produc pr = new Produc(r);
  103.                 Consum co = new Consum(r);

  104.                 Thread t1 = new Thread(pr);
  105.                 Thread t2 = new Thread(pr);
  106.                 Thread t3 = new Thread(co);
  107.                 Thread t4 = new Thread(co);

  108.                 t1.start();
  109.                 t2.start();
  110.                 t3.start();
  111.                 t4.start();
  112.         }
  113. }
复制代码




LockDemo.png (55.29 KB, 下载次数: 0)

LockDemo.png

点评

lock.newCondition()就是返回一个Condition对象,不需要再加new了。  发表于 2014-9-8 11:56

9 个回复

倒序浏览
把这个地方的new 去掉就好了  条件是绑定在已有的lock对象上的不用new

lock.JPG (13.62 KB, 下载次数: 5)

lock.JPG
回复 使用道具 举报
夜半风 发表于 2014-9-8 11:20
把这个地方的new 去掉就好了  条件是绑定在已有的lock对象上的不用new

你再好好看看 毕老师的视频 应该也没有new
回复 使用道具 举报
这是毕老师的原版代码 你看看

lock.png (85.99 KB, 下载次数: 0)

lock.png
回复 使用道具 举报
夜半风 发表于 2014-9-8 11:25
这是毕老师的原版代码 你看看

原来问题出在这啊。谢谢啊。
编译器说是包不存在,我就没把注意力放在new上…………
回复 使用道具 举报
学习啦,一起努力
回复 使用道具 举报
newCondition() 是lock的方法,不用new
回复 使用道具 举报
估计就是习惯性的写上new了
回复 使用道具 举报
过来学习的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马