Lock是java5提供的一个线程同步机制--实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。
ReadLock、WriteLock、ReentrantLock 是Lock接口的三个实现类。
常用的是ReentrantLock。
Lock接口提供的两个方法:
lock():获取锁。
unlock():释放锁。
由于synchronized的锁完全是由虚拟机操作,完全不知道在哪加锁在哪释放了锁,所以Java5提供的Lock锁对象让我们对锁的获取和释放更加清晰。
注意事项:
synchronized在程序抛出异常时,虚拟机会自动释放占有的锁。而Lock锁对象在抛出异常时,除非调用了unlock方法会释放锁,否则是不会自己释放锁,建议用try catch块中在finally中加入unlock方法。
浙公网安备 33010602011771号