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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王永荣 中级黑马   /  2012-10-31 20:06  /  2906 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王永荣 于 2012-10-31 21:54 编辑

就是毕老师多线程中的说5.0中的Lock例子
  1. import java.util.concurrent.locks.*;

  2. class ProducerConsumerDemo2
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Resource r = new Resource();

  7.                 Producer pro = new Producer(r);
  8.                 Consumer con = new Consumer(r);

  9.                 Thread t1 = new Thread(pro);
  10.                 Thread t2 = new Thread(pro);
  11.                 Thread t3 = new Thread(con);
  12.                 Thread t4 = new Thread(con);

  13.                 t1.start();
  14.                 t2.start();
  15.                 t3.start();
  16.                 t4.start();

  17.         }
  18. }
  19. class Resource
  20. {
  21.         private String name;
  22.         private int count = 1;
  23.         private boolean flag = false;
  24.                         //  t1    t2
  25.         private Lock lock = new ReentrantLock();

  26.         private Condition condition_pro = lock.newCondition();
  27.         private Condition condition_con = lock.newCondition();



  28.         public  void set(String name)throws InterruptedException
  29.         {
  30.                 lock.lock();
  31.                 try
  32.                 {
  33.                         while(flag)
  34.                                 condition_pro.await();//t1,t2
  35.                         this.name = name+"--"+count++;

  36.                         System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
  37.                         flag = true;
  38.                         condition_con.signal();
  39.                 }
  40.                 finally
  41.                 {
  42.                         lock.unlock();//释放锁的动作一定要执行。
  43.                 }
  44.         }


  45.         //  t3   t4  
  46.         public  void out()throws InterruptedException
  47.         {
  48.                 lock.lock();
  49.                 try
  50.                 {
  51.                         while(!flag)
  52.                                 condition_con.await();
  53.                         System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);
  54.                         flag = false;
  55.                         condition_pro.signal();
  56.                 }
  57.                 finally
  58.                 {
  59.                         lock.unlock();
  60.                 }
  61.                
  62.         }
  63. }

  64. class Producer implements Runnable
  65. {
  66.         private Resource res;

  67.         Producer(Resource res)
  68.         {
  69.                 this.res = res;
  70.         }
  71.         public void run()
  72.         {
  73.                 while(true)
  74.                 {
  75.                         try
  76.                         {
  77.                                 res.set("+商品+");
  78.                         }
  79.                         catch (InterruptedException e)
  80.                         {
  81.                         }
  82.                         
  83.                 }
  84.         }
  85. }

  86. class Consumer implements Runnable
  87. {
  88.         private Resource res;

  89.         Consumer(Resource res)
  90.         {
  91.                 this.res = res;
  92.         }
  93.         public void run()
  94.         {
  95.                 while(true)
  96.                 {
  97.                         try
  98.                         {
  99.                                 res.out();
  100.                         }
  101.                         catch (InterruptedException e)
  102.                         {
  103.                         }
  104.                 }
  105.         }
  106. }
复制代码
执行后报错。。


ProducerConsumerDemo2.java:48: 错误: 不兼容的类型
        private Lock lock = new ReentrantLock();
                            ^
  需要: Lock
  找到:    ReentrantLock
ProducerConsumerDemo2.java:50: 错误: 找不到符号
        private Condition condition_pro = lock.newCondition();
                                              ^
  符号:   方法 newCondition()
  位置: 类型为Lock的变量 lock
ProducerConsumerDemo2.java:51: 错误: 找不到符号
        private Condition condition_con = lock.newCondition();
                                              ^
  符号:   方法 newCondition()
  位置: 类型为Lock的变量 lock
ProducerConsumerDemo2.java:57: 错误: 找不到符号
                lock.lock();
                    ^
  符号:   方法 lock()
  位置: 类型为Lock的变量 lock
ProducerConsumerDemo2.java:70: 错误: 找不到符号
                        lock.unlock();//释放锁的动作一定要执行。
                            ^
  符号:   方法 unlock()
  位置: 类型为Lock的变量 lock
ProducerConsumerDemo2.java:78: 错误: 找不到符号
                lock.lock();
                    ^
  符号:   方法 lock()
  位置: 类型为Lock的变量 lock
ProducerConsumerDemo2.java:89: 错误: 找不到符号
                        lock.unlock();
                            ^
  符号:   方法 unlock()
  位置: 类型为Lock的变量 lock
7 个错误




看着架势,似乎是没导入包的问题?可是我明明在第一句import了啊。。。头疼




11 个回复

倒序浏览
求解啊。。。。。。难道我这系统出错了吗
回复 使用道具 举报
你在试试   代码没有错误  我试了   可能是其他地方出错了
回复 使用道具 举报
重装了一次jdk,重新配置过,都没用哇。
回复 使用道具 举报
我复制了你的代码在我的电脑中试了是可以运行的  
所以这应该是你JDK的版本的问题  可能是你JDK版本太低
LOCK是1.5出现的
回复 使用道具 举报
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

你用这两句试试
回复 使用道具 举报
吴硕 中级黑马 2012-10-31 21:24:43
7#
代码可以正常运行(jdk1.6),和系统应该没什么关系
使用的Eclipse吗?换成jdk1.6看看
回复 使用道具 举报
我把需要导入的类挑出来,它却能用了{:soso__9253207014726057418_1:}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.Condition;
但是还是没有解决问题,import java.util.concurrent.locks.*;为什么不管用了呢?????
回复 使用道具 举报
曾浩 发表于 2012-10-31 21:17
我复制了你的代码在我的电脑中试了是可以运行的  
所以这应该是你JDK的版本的问题  可能是你JDK版本太低 ...

是官网下的最新的 1.7
回复 使用道具 举报
吴硕 发表于 2012-10-31 21:24
代码可以正常运行(jdk1.6),和系统应该没什么关系
使用的Eclipse吗?换成jdk1.6看看 ...

用的notepad++....jdk是官网下的最新的
回复 使用道具 举报
吴硕 中级黑马 2012-10-31 21:32:27
11#
王永荣 发表于 2012-10-31 21:28
用的notepad++....jdk是官网下的最新的

我试了下jdk1.7运行代码,也没有任何问题
回复 使用道具 举报
吴硕 发表于 2012-10-31 21:32
我试了下jdk1.7运行代码,也没有任何问题

哎 不管了。。我用Eclipse也能正常运行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马