Что вы на самом деле используете для этого метода lockInterruptibly
? Я прочитал API, но мне это не очень понятно. Может ли кто-нибудь выразить это другими словами?Фактическое использование lockInterruptibly для ReentrantLock
7
A
ответ
3
Логика такая же, как и для всех прерывных методов блокировки: она позволяет потоку немедленно реагировать на сигнал , отправленный ему из другого потока.
Как эта особенность используется до дизайна приложения. Например, его можно использовать для уничтожения контингента потоков в пуле, которые все ждут блокировки.
7
lockInterruptibly()
может блокироваться, если замок уже удерживается другой нитью и будет ждать, пока замок не будет приобретен. Это то же самое, что и с обычным lock()
. Но если другой поток прерывает ожидающий поток, то lockInterruptibly()
будет кидать InterruptedException
.
Как указано «это позволяет потоку немедленно реагировать на сигнал прерывания, отправленный ему из другого потока», означает ли это, когда потоки вызовов lockInterruptibly() будут ждать сигнала прерывания из другого потока, если блокировка не доступна сразу завладеть им ?. Поток, который посылает сигнал прерывания, удерживает блокировку до тех пор, пока она не прерывает сигналы? – MKod
Любой поток может прерывать поток, он не должен быть тем, у кого есть блокировка. –
Прерывания потока Java отличаются от прерываний аппаратного обеспечения или операционной системы. Доставка прерываний является синхронной и не превентивной, а не асинхронной и превентивной, т. Е. Они не встречаются в произвольной точке и не приостанавливают (и затем возобновляют) код запуска. Программа должна проверить их явно. Итак, вы говорите, что 'lockInterruptibly' постоянно проверяет их явно? – overexchange