黑马程序员技术交流社区

标题: ReentrantLock无法转换为Lock??? [打印本页]

作者: blz01003hm    时间: 2014-5-20 16:41
标题: ReentrantLock无法转换为Lock???
本帖最后由 blz01003hm 于 2014-5-21 00:14 编辑
  1. import java.util.concurrent.locks.*;
  2. class BoundedBuffer {
  3.    final Lock lock = new ReentrantLock();//说ReentrantLock无法转换为Lock???
  4.    final Condition notFull  = lock.newCondition();
  5.    final Condition notEmpty = lock.newCondition();

  6.    final Object[] items = new Object[100];
  7.    int putptr, takeptr, count;

  8.    public void put(Object x) throws InterruptedException {
  9.      lock.lock();
  10.      try {
  11.        while (count == items.length)
  12.          notFull.await();
  13.        items[putptr] = x;
  14.        if (++putptr == items.length) putptr = 0;
  15.        ++count;
  16.        notEmpty.signal();
  17.      } finally {
  18.        lock.unlock();
  19.      }
  20.    }

  21.    public Object take() throws InterruptedException {
  22.      lock.lock();
  23.      try {
  24.        while (count == 0)
  25.          notEmpty.await();
  26.        Object x = items[takeptr];
  27.        if (++takeptr == items.length) takeptr = 0;
  28.        --count;
  29.        notFull.signal();
  30.        return x;
  31.      } finally {
  32.        lock.unlock();
  33.      }
  34.    }
  35. }
复制代码

这是复制示例代码也说 ReentrantLock无法转换为Lock?

1.png (120.56 KB, 下载次数: 7)

1.png

作者: 海世山盟    时间: 2014-5-20 19:32
分别导包就没有问题。
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
因为那两个是两个接口,因此里面的方法都是抽象的你是不可能在locks里面找到他们的方法的。你必须单独导入才可以的。
作者: wangleixhlm    时间: 2014-5-20 19:48
在我这没有任何问题啊。
作者: blz01003hm    时间: 2014-5-21 00:14
海世山盟 发表于 2014-5-20 19:32
分别导包就没有问题。
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks. ...

谢谢 得了


但毕老师就导了个import java.util.concurrent.locks.*;


作者: blz01003hm    时间: 2014-5-22 10:40
blz01003hm 发表于 2014-5-21 00:14
谢谢 得了

可编译通过了。。。




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