Что происходит, когда несколько потоков хотят получить доступ к ReentrantReadWriteLock? - PullRequest
0 голосов
/ 19 августа 2011

При применении reentrantReadWriteLock, и он заблокирован, что произойдет, если другой поток получит доступ к блокировке, пока он уже выполняет другой блок? (Таким образом, прежде чем он достигнет .unlock)

Метод отменен? Или, возможно, он остановился? : O

Ответы [ 4 ]

2 голосов
/ 20 августа 2011

Поскольку вы сказали ReentrantReadWriteLock, поведение зависит от того, говорите ли вы о блокировке чтения или блокировке записи, связанной с ReadWriteLock.

  1. Если вы пытаетесь получить блокировку записи, вы будете заблокированы, пока все держатели не снимают блокировку (будь то блокировка чтения или блокировка записи)
  2. Если вы пытаетесь получить блокировку чтения, и у вас нет держателя блокировки записи, вы всегда сможете получить его , даже если есть другие держатели блокировки чтения
  3. Если вы пытаетесь получить блокировку чтения и у вас есть держатель блокировки записи, вы будете заблокированы, пока держатель блокировки записи не снимет блокировку записи

Блокировка чтения может удерживаться одновременно несколькими потоками, если нет записывающего устройства.

1 голос
/ 19 августа 2011

Поток заблокируется. Если более чем один поток попытается получить эту блокировку, все они будут заблокированы. Когда блокировка снята, ровно один поток из пула ожидания получит блокировку, а остальные все еще будут ждать. См. разницу между справедливыми и несправедливыми замками.

1 голос
/ 19 августа 2011

Поток будет блокироваться, пока блокировка не будет доступна. (документы)

Если вы хотите получить блокировку только при ее наличии, вы можете использовать tryLock ()

0 голосов
/ 19 августа 2011

Если вы не хотите блокировать, вы можете использовать Lock.tryLock() (который пытается без ожидания) или tryLock(long time, TimeUnit unit), который будет ждать только столько времени, сколько вы укажете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...