Lock是java5提供的一个线程同步机制--实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。

ReadLock、WriteLock、ReentrantLock 是Lock接口的三个实现类。

常用的是ReentrantLock。

Lock接口提供的两个方法:

lock():获取锁。

unlock():释放锁。

由于synchronized的锁完全是由虚拟机操作,完全不知道在哪加锁在哪释放了锁,所以Java5提供的Lock锁对象让我们对锁的获取和释放更加清晰。

注意事项:

synchronized在程序抛出异常时,虚拟机会自动释放占有的锁。而Lock锁对象在抛出异常时,除非调用了unlock方法会释放锁,否则是不会自己释放锁,建议用try catch块中在finally中加入unlock方法。