Spec-Zone .ru
спецификации, руководства, описания, API
|
public static class ReentrantReadWriteLock.WriteLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.writeLock()
.Модификатор | Конструктор и Описание |
---|---|
protected |
ReentrantReadWriteLock.WriteLock(ReentrantReadWriteLock lock)
Конструктор для использования подклассами
|
Модификатор и Тип | Метод и Описание |
---|---|
int |
getHoldCount()
Запрашивает число, держится эта блокировка записи текущим потоком.
|
boolean |
isHeldByCurrentThread()
Запросы, если эта блокировка записи сохранена текущим потоком.
|
void |
lock()
Получает блокировку записи.
|
void |
lockInterruptibly()
Получает блокировку записи, если текущий поток не прерывается.
|
Условие |
newCondition()
|
Строка |
toString()
Возвращает строку, идентифицирующую эту блокировку, так же как ее состояние блокировки.
|
boolean |
tryLock()
Получает блокировку записи, только если она не сохранена другим потоком во время вызова.
|
boolean |
tryLock(long timeout, TimeUnit unit)
Получает блокировку записи, если она не сохранена другим потоком в пределах данного времени ожидания, и текущий поток не был прерван.
|
void |
unlock()
Попытки выпустить эту блокировку.
|
protected ReentrantReadWriteLock.WriteLock(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)
который почти эквивалентен (это также обнаруживает прерывание).
Если текущий поток уже содержит эту блокировку тогда, количество хранения постепенно увеличивается одним и возвратами метода true
.
Если блокировка будет сохранена другим потоком тогда, то этот метод сразу возвратится со значением false
.
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
Получает блокировку записи, если ни чтение, ни блокировка записи не сохранены другим потоком, и сразу возвращается со значением true
, установка блокировки записи содержит количество одному. Если эта блокировка была установлена использовать справедливую политику упорядочивания тогда, доступная блокировка не будет получена, если какие-либо другие потоки будут ожидать блокировки записи. Это в отличие от tryLock()
метод. Если Вы хотите синхронизированное tryLock
это действительно разрешает неуклюже передвигаться на справедливой блокировке, тогда комбинируют синхронизированные и несинхронизированные формы вместе:
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}
Если текущий поток уже содержит эту блокировку тогда, количество хранения постепенно увеличивается одним и возвратами метода true
.
Если блокировка сохранена другим потоком тогда, текущий поток становится отключенным в целях планирования потоков и бездействует, пока одна из трех вещей не происходит:
Если блокировка записи получается тогда значение true
возвращается и блокировка записи содержат количество, устанавливается в одного.
Если текущий поток:
InterruptedException
бросается и прерванное состояние текущего потока очищается. Если указанное время ожидания протекает тогда значение false
возвращается. Если время будет меньше чем или равно нулю, то метод не будет ожидать вообще.
В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение дается отвечанию на прерывание по нормальному или повторно используемому сбору блокировки, и по созданию отчетов о протекании времени ожидания.
tryLock
в интерфейсе Lock
timeout
- время, чтобы ожидать блокировки записиunit
- единица измерения времени параметра тайм-аутаtrue
если блокировка была свободна и была получена текущим потоком, или блокировка записи была уже сохранена текущим потоком; и false
если время ожидания, законченное перед блокировкой, могло бы быть получено.InterruptedException
- если текущий поток прерываетсяNullPointerException
- если единица измерения времени является нулемpublic void unlock()
Если текущий поток является держателем этой блокировки тогда, количество хранения постепенно уменьшается. Если количество хранения является теперь нулем тогда, блокировка выпускается. Если текущий поток не является держателем этой блокировки тогда IllegalMonitorStateException
бросается.
unlock
в интерфейсе Lock
IllegalMonitorStateException
- если текущий поток не содержит эту блокировку.public Condition newCondition()
Condition
экземпляр для использования с этим Lock
экземпляр. Возвращенный Condition
экземпляр поддерживает те же самые использования также, как и Object
методы монитора (wait
, notify
, и notifyAll
) когда использующийся со встроенной блокировкой монитора.
Condition
метод вызывают тогда IllegalMonitorStateException
бросается. (Читайте, блокировки сохранены независимо от блокировок записи, так не проверяются или влияются. Однако это - по существу всегда ошибка вызвать метод ожидания условия, когда текущий поток также получил блокировки чтения, так как другие потоки, которые могли разблокировать это, не будут в состоянии получить блокировку записи.) InterruptedException
будет брошен, и прерванное состояние потока будет очищено. newCondition
в интерфейсе Lock
public String toString()
"Unlocked"
или Строка "Locked by"
сопровождаемый именем потока обладания.public boolean isHeldByCurrentThread()
ReentrantReadWriteLock.isWriteLockedByCurrentThread()
.true
если текущий поток содержит эту блокировку и false
иначеpublic int getHoldCount()
ReentrantReadWriteLock.getWriteHoldCount()
.
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92