锁降级发生在一个线程中先申请写锁,在释放写锁前又申请了读锁,这样一个线程同时拥有了写锁和读锁,写锁被降级成为了读锁。这样做有什么好处呢?其目的是写后读,保证写操作的可见性。
当一个线程进行完写操作,比如线程A,如果它释放了写锁,其他线程(线程B)如果抢到了写锁就有可能对刚修改的数据进行操作,在占有写锁的时候,是无法申请读锁的(线程A),所以有可能线程A想操作刚才修改的结果是无法完成的(只能等待线程B释放写锁再进行读操作,但是此时线程A读到的数据是线程B修改后的数据),此时可以在释放写锁之前先加个读锁(线程A),这时即使释放了写锁,但是还拥有一个读锁没释放(线程A),其他线程还是无法修改数据,申请写锁(线程B)。