java中写锁降级为读锁的实现与作用
如何实现写锁降级:
writeLock.lock();
try{
try{
//修改操作
......
readLock.lock();
}finally{
writeLock.unlock();
}
//读取后操作
...
}finally{
readLock.unlock();
}
何时使用锁降级:
我认为在当前线程修改后需要读这个值时,是需要使用锁降级的,因为如果一直使用写锁,那么即使当前线程修改结束,其他线程也无法读这个值。
为什么不能释放写锁后再加读锁:
这就涉及到了并发问题,如果先释放写锁,那么共享变量很可能又会被其他线程加写锁,然后修改掉,而当前线程在加上读锁读取时,可能该值已经被修改了,已经不是自己当时改的值了,就无法实现当前线程读取时对于自己修改的可见性。