Spec-Zone .ru
спецификации, руководства, описания, API
|
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.readLock()
.Модификатор | Конструктор и Описание |
---|---|
protected |
ReentrantReadWriteLock.ReadLock(ReentrantReadWriteLock lock)
Конструктор для использования подклассами
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
lock()
Получает блокировку чтения.
|
void |
lockInterruptibly()
Получает блокировку чтения, если текущий поток не прерывается.
|
Условие |
newCondition()
Броски
UnsupportedOperationException потому что ReadLocks не поддерживайте условия. |
Строка |
toString()
Возвращает строку, идентифицирующую эту блокировку, так же как ее состояние блокировки.
|
boolean |
tryLock()
Получает блокировку чтения, только если блокировка записи не сохранена другим потоком во время вызова.
|
boolean |
tryLock(long timeout, TimeUnit unit)
Получает блокировку чтения, если блокировка записи не сохранена другим потоком в пределах данного времени ожидания, и текущий поток не был прерван.
|
void |
unlock()
Попытки выпустить эту блокировку.
|
protected ReentrantReadWriteLock.ReadLock(ReentrantReadWriteLock lock)
lock
- внешний объект блокировкиNullPointerException
- если блокировка является нулемpublic void lock()
Получает блокировку чтения, если блокировка записи не сохранена другим потоком и возвратами сразу.
Если блокировка записи сохранена другим потоком тогда, текущий поток становится отключенным в целях планирования потоков и бездействует, пока блокировка чтения не была получена.
public void lockInterruptibly() throws InterruptedException
Получает блокировку чтения, если блокировка записи не сохранена другим потоком и возвратами сразу.
Если блокировка записи сохранена другим потоком тогда, текущий поток становится отключенным в целях планирования потоков и бездействует, пока одна из двух вещей не происходит:
Если текущий поток:
InterruptedException
бросается и прерванное состояние текущего потока очищается. В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение дается отвечанию на прерывание по нормальному или повторно используемому сбору блокировки.
lockInterruptibly
в интерфейсе Lock
InterruptedException
- если текущий поток прерываетсяpublic boolean tryLock()
Получает блокировку чтения, если блокировка записи не сохранена другим потоком и сразу возвращается со значением true
. Даже когда эта блокировка была установлена использовать справедливую политику упорядочивания, звонок tryLock()
сразу получит блокировку чтения, если это будет доступно, ожидают ли другие потоки в настоящий момент блокировки чтения. Это поведение "неуклюжей походки" может быть полезным при определенных обстоятельствах, даже при том, что оно повреждает справедливость. Если Вы хотите соблюдать установку справедливости для этой блокировки, то используйте tryLock(0, TimeUnit.SECONDS)
который почти эквивалентен (это также обнаруживает прерывание).
Если блокировка записи будет сохранена другим потоком тогда, то этот метод сразу возвратится со значением false
.
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
Получает блокировку чтения, если блокировка записи не сохранена другим потоком и сразу возвращается со значением true
. Если эта блокировка была установлена использовать справедливую политику упорядочивания тогда, доступная блокировка не будет получена, если какие-либо другие потоки будут ожидать блокировки. Это в отличие от tryLock()
метод. Если Вы хотите синхронизированное tryLock
это действительно разрешает неуклюже передвигаться на справедливой блокировке, тогда комбинируют синхронизированные и несинхронизированные формы вместе:
if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
Если блокировка записи сохранена другим потоком тогда, текущий поток становится отключенным в целях планирования потоков и бездействует, пока одна из трех вещей не происходит:
Если блокировка чтения получается тогда значение true
возвращается.
Если текущий поток:
InterruptedException
бросается и прерванное состояние текущего потока очищается. Если указанное время ожидания протекает тогда значение false
возвращается. Если время будет меньше чем или равно нулю, то метод не будет ожидать вообще.
В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение дается отвечанию на прерывание по нормальному или повторно используемому сбору блокировки, и по созданию отчетов о протекании времени ожидания.
tryLock
в интерфейсе Lock
timeout
- время, чтобы ожидать блокировки чтенияunit
- единица измерения времени параметра тайм-аутаtrue
если блокировка чтения была полученаInterruptedException
- если текущий поток прерываетсяNullPointerException
- если единица измерения времени является нулемpublic void unlock()
Если число читателей является теперь нулем тогда, блокировка делается доступной для попыток блокировки записи.
public Condition newCondition()
UnsupportedOperationException
потому что ReadLocks
не поддерживайте условия.newCondition
в интерфейсе Lock
Condition
экземпляр для этого Lock
экземплярUnsupportedOperationException
- всегдаpublic String toString()
"Read locks ="
сопровождаемый числом сохраненных блокировок чтения.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.