Lock比synchronized灵活,可以显式的释放锁
Lock接口已实现的
子类有:
ReentrantLock 可重入锁
ReentrantReadWriteLock.ReadLock 读锁
ReentrantReadWriteLock.WriteLock 写锁读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁!
ReadWriteLock 接口已实现的子类ReentrantReadWriteLock 可重入读写锁ReentrantReadWriteLock会使用两把锁来解决问题,一个读锁,一个写锁
这个类中嵌套了Lock的两个子类
ReentrantReadWriteLock.ReadLock 读锁
ReentrantReadWriteLock.WriteLock 写锁
锁的基本使用结构
public void put(Object x) throws InterruptedException {
lock.lock();
try {
while (count == items.length)
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
} finally {
lock.unlock();
}
}