public Condition newCondition() { return sync.newCondition(); }
------解决思路----------------------
如果说Condition是接口的话,那么 return new Condition(); 是肯定会报错的。如果你用过List集合的话就会好理解一点。List是一个接口,它有两个实现类,ArrayList和LinkedList。所以我们在定义List集合的时候,都是 List list = new ArrayList(); 或者 List list = new LinkedList(); 。但是如果写成 List list = new List(); ,编译器就会报错。 简单来说,就是不能用接口去实例化一个对象,但是可以用接口的实现类去实例化对象。 ------解决思路---------------------- 有些时候,看API看不懂的话,看看源码就知道了。。Lock接口有一个实现类 ReentrantLock,在这个实现类中可以找到newCondition的具体实现
public Condition newCondition() { return sync.newCondition(); }
那么继续,可以找到一个叫sync的类
abstract static class Sync extends AbstractQueuedSynchronizer
在sync类中,可以找到
final ConditionObject newCondition() { return new ConditionObject(); }