黑马程序员技术交流社区

标题: 学习java.util.concurrent.locks包中的Lock遇到的问题 [打印本页]

作者: 刀郎去西藏    时间: 2015-12-29 23:37
标题: 学习java.util.concurrent.locks包中的Lock遇到的问题
本帖最后由 刀郎去西藏 于 2015-12-29 23:39 编辑

我在跟着视频学习时,为什么我明明引入了"java.util.concurrent.locks.*",在程序中这句提示final Lock lock = new ReentrantLock();不兼容的类型。 ReentrantLock类不是实现了lock方法吗?这里不就是相当于父类引用指向子类对象,怎么能是不兼容的类型呢?望麻油门解答。
  1. import java.util.concurrent.locks.*;
  2. //不引入这个类就总会报下面的不兼容错误。这是为什么呢?上面有通配符呀!!!!!
  3. import java.util.concurrent.locks.Lock;
  4. class Resource{
  5.         private String name;
  6.         private int num = 1;
  7.         private boolean flag = false;
  8. //为什么会一直报不可兼容的类型???父类引用指向子类对象,怎么回事
  9.         final Lock lock = new ReentrantLock();
  10.         final Condition condition_pro = lock.newCondition();
  11.         final Condition condition_con = lock.newCondition();
  12.         public  void set(String name)throws InterruptedException{
  13.                 lock.lock();
  14.                 try{
  15.                         while(flag){
  16.                                 condition_pro.await();
  17.                         }
  18.                         this.name = name + "----" + num++;
  19.                         System.out.println("-------------------------"+Thread.currentThread().getName()+"我生产了"+this.name);
  20.                         condition_con.signal();
  21.                         flag = true;
  22.                         
  23.                         //catch(InterruptedException ie){}
  24.                 }finally{        
  25.                         lock.unlock();
  26.                 }
  27.         }
  28.         public void out()throws InterruptedException{
  29.                 lock.lock();
  30.                 try{
  31.                         while(!flag){
  32.                                 condition_con.await();
  33.                         }
  34.                         System.out.println(Thread.currentThread().getName()+"我消费了" + this.name);
  35.                         condition_pro.signal();
  36.                         flag = false;
  37.                         //catch(InterruptedException ie){}
  38.                 }finally{
  39.                         lock.unlock();
  40.                 }        
  41.         }
  42. }                        
  43. class Producer implements Runnable{
  44.         private Resource r;
  45.         Producer(Resource r){
  46.                 this.r = r;
  47.         }
  48.         public void run(){
  49.                 while(true){
  50.                         try{
  51.                                 r.set("商品");
  52.                         }catch(InterruptedException ie){}
  53.                 }
  54.         }
  55. }
  56. class Consumer implements Runnable{
  57.         private Resource r;
  58.         Consumer(Resource r){
  59.                 this.r = r;
  60.         }
  61.         public void run(){
  62.                 while(true){
  63.                         try{
  64.                                 r.out();
  65.                         }catch(InterruptedException ie){}
  66.                 }
  67.         }
  68. }
  69. public class ProducerConsumerTestImproved{
  70.         public static void main(String[] args){
  71.                 Resource r = new Resource();
  72.                 Producer p = new Producer(r);
  73.                 Consumer c = new Consumer(r);
  74.                 Thread t1 = new Thread(p);
  75.                 Thread t2 = new Thread(p);
  76.                 Thread t3 = new Thread(c);
  77.                 Thread t4 = new Thread(c);
  78.                 t1.start();
  79.                 t2.start();
  80.                 t3.start();
  81.                 t4.start();
  82.         }
  83. }
复制代码


作者: 刀郎去西藏    时间: 2015-12-29 23:40
我可是下了血本呀,总共奖励10个黑马币,望麻油门帮忙。
作者: 刀郎去西藏    时间: 2015-12-29 23:41
刀郎去西藏 发表于 2015-12-29 23:40
我可是下了血本呀,总共奖励10个黑马币,望麻油门帮忙。

奥对了,大家不要用Eclipse编译,用DOS窗口编译才能发现报错
作者: 旺仔小石头    时间: 2015-12-30 10:43
围观,坐等大神出现
作者: 唱一些温暖    时间: 2015-12-30 11:37
坐等啊~~~~~
作者: csc    时间: 2015-12-30 12:56
前排支持
作者: 木头小丸子    时间: 2015-12-30 17:56
哇,坐等大神
作者: bowllboy    时间: 2015-12-30 18:03
我是看你名字进来的
作者: lts0616    时间: 2015-12-30 19:23
赞一下!
作者: aymore    时间: 2015-12-30 20:11
哇,坐等大神
作者: 平凡D世界    时间: 2015-12-30 23:22
坐等大神
作者: 刀郎去西藏    时间: 2015-12-30 23:24
bowllboy 发表于 2015-12-30 18:03
我是看你名字进来的

我的名字怎么了?
作者: chenxin_0916    时间: 2015-12-30 23:44
前来学习的!

作者: hmjava520    时间: 2015-12-30 23:57
表示还看不懂
作者: 刀郎去西藏    时间: 2015-12-31 00:00
大神在哪里?
作者: 刀郎去西藏    时间: 2015-12-31 00:09
旺仔小石头 发表于 2015-12-30 10:43
围观,坐等大神出现


作者: 刀郎去西藏    时间: 2015-12-31 00:18
旺仔小石头 发表于 2015-12-30 10:43
围观,坐等大神出现

一起坐等大神
作者: 刀郎去西藏    时间: 2015-12-31 00:20
唱一些温暖 发表于 2015-12-30 11:37
坐等啊~~~~~


作者: 刀郎去西藏    时间: 2015-12-31 00:23
csc 发表于 2015-12-30 12:56
前排支持


作者: 549208564    时间: 2015-12-31 01:46
之前听老师说过这个问题,但是忘了,等大神解答
作者: 549208564    时间: 2015-12-31 01:59
我在DOS命令行中运行是个无限循环,没有报错,不知道你报的什么错
作者: aymore    时间: 2015-12-31 12:42
等大神解答
作者: 劉一刀    时间: 2015-12-31 12:49
跟着学习一波
作者: 土豆片炒肉灬    时间: 2015-12-31 13:57
论坛里的人个个都牛逼哄哄的样子,要我怎么办!
作者: 刀郎去西藏    时间: 2015-12-31 23:12
土豆片炒肉灬 发表于 2015-12-31 13:57
论坛里的人个个都牛逼哄哄的样子,要我怎么办!

那就努力做个不牛逼哄哄的人,来尽自己的绵薄之力来改变这种氛围。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2