ReentrantReadWriteLock,ReadLock和WriteLock之间有什么区别

不是p*_*phd 37 java multithreading deadlock locking reentrantreadwritelock

我所知道的,writelock就像是同步的.

Readlock和writelock以某种方式相互影响.

ReadLock似乎不能单独工作.

Old*_*eon 101

readLock.lock();

这意味着如果任何其他线程正在写入(即保持写锁定),则在此处停止,直到没有其他线程正在写入.

一旦授予锁定,就不允许其他线程写入(即进行写锁定),直到锁定被释放.


writeLock.lock();

这意味着如果任何其他线程正在读取写入,请在此处停止并等待,直到没有其他线程正在读取或写入.

一旦授予锁定,就不允许其他线程读取写入(即读取或写入锁定),直到锁定被释放.


结合这些,您可以一次只安排一个线程进行写访问,但是除了线程写入之外,您可以同时读取多个读取器.

换一种方式.你想每次读取从结构,采取了锁.每次要写入时,都要进行锁定.这样一旦写入发生,没有人正在阅读(你可以想象你有独家访问权限),但只要没有人在写,就会有许多读者同时阅读.

  • +1好的解释.仅仅为了澄清,"一个"你的意思是"线程". (6认同)

Jon*_*eet 17

文档ReadWriteLock清楚地说明了这一点:

ReadWriteLock维护一对关联的锁,一个用于只读操作,另一个用于写入.只要没有写入器,读锁定可以由多个读取器线程同时保持.写锁是独占的.

所以你一次可以有很多读者,但只有一位作家 - 作家也会阻止读者阅读.如果您有一些可以安全地从多个线程读取的资源,并且读取比写入更常见,但是当资源实际上不是只读时,这非常有用.(如果没有作者并且阅读是安全的,则根本不需要锁定.)


Eng*_*uad 7

当一个线程获取WriteLock,没有其他线程可以获取ReadLock,也没有WriteLock相同的实例中ReentrantReadWriteLock,除非该线程释放锁.但是,多个线程可以同时获取ReadLock.