Locks包层次结构:
Lock接口:
总结:
1.lock()最常用
2.lockInterruptibly()方法一般更加昂贵,有的impl可能没有实现lockInterruptibly(),只有真的需要效应中断时才使用,使用之前看看impl对该方法的描述。
Condition:
ReentrantLock:
重入
count!=0 说明锁被占用
判断owner是否时当前线程,如果不是就进入waiters,挂起当前线程;如果是,就重入。
synchronized vs Lock:
读写锁:
ReadWriteLock:维护一对关联锁,一个只用于读操作,一个只用于写操作;读锁可以由多个线程同时持有,写是排他的。用一个时间,两把锁不能被不同线程持有。