java并发编程--互斥锁, 读写锁及条件
?
[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]?
?
java.util.concurrent.locks包提供了锁和等待条件的接口和类, 可用于替代JDK1.5之前的同步(synchronized)和监视器机制(主要是Object类的wait(), notify(), notifyAll()方法).
?
互斥锁--Lock接口及其实现类ReentrantLock
所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问. 而现在, Lock提供了比synchronized机制更广泛的锁定操作, Lock和synchronized机制的主要区别:
synchronized机制提供了对与每个对象相关的隐式监视器锁的访问, 并强制所有锁获取和释放均要出现在一个块结构中,?当获取了多个锁时,?它们必须以相反的顺序释放.?synchronized机制对锁的释放是隐式的, 只要线程运行的代码超出了synchronized语句块范围, 锁就会被释放. 而Lock机制必须显式的调用Lock对象的unlock()方法才能释放锁, 这为获取锁和释放锁不出现在同一个块结构中, 以及以更自由的顺序释放锁提供了可能.?以下代码演示了在不同的块结构中获取和释放锁:不管程序运行多久, 也不会有人妖的出现.