ReadWriteLock读写分离锁可以有效地减少锁竞争,以提升系统性能。
比如线程A1,A2,A3进行写操作,B1,B2,B3进行读操作。如果使用重入锁(ReenTrantLock)或内部锁(Synchronized),则所有的读之间,读与写之间,写与写之间都是串行的。由于读操作并不对数据的完整性造成破坏,所以这种等待其实是不合理的。因此,就有了读写分离锁。
读写锁允许多个线程同时读,使得B1,B2,B3可以真正地并行。但是考虑到数据的完整性,写写操作之间和读写操作之间任然需要互相等待和持有锁。
读 | 写 | |
---|---|---|
读 | 非阻塞 | 阻塞 |
写 | 阻塞 |