日期:2014-05-20  浏览次数:20845 次

Lock接口和ReentrantLock类
今天看见一个程序,如下:
public static class Account
{
  private static Lock lock = new ReentrantLock(); //代码1
  private int balance = 0;
}
在后面的程序中,有这样的语句:lock.lock();
我看了一下Lock接口的内容,有一个抽象方法: void lock();
然后我就糊涂了,ReentrantLock类是接口Lock接口的实现,把ReentrantLock类的实例lock申明为接口类型。可接口里lock()方法并没有实现部分,lock.lock()怎么能执行方法呢?
另外,在ReentrantLock类有个内部静态类
final static class NonfairSync 其中有个这么一个方法:
final void lock()
{
  实现部分(略)
}
既然ReentrantLock类里面就有lock()方法和实现部分,为什么代码1不这么写:
private static ReentrantLock lock = new ReentrantLock();

------解决方案--------------------
List是接口,ArrayList是他的实现类。
但是我们通常都这样写:

List list = new ArrayList();
一个道理