2013-07-23 5 views

ответ

3

Логика такая же, как и для всех прерывных методов блокировки: она позволяет потоку немедленно реагировать на сигнал , отправленный ему из другого потока.

Как эта особенность используется до дизайна приложения. Например, его можно использовать для уничтожения контингента потоков в пуле, которые все ждут блокировки.

+0

Как указано «это позволяет потоку немедленно реагировать на сигнал прерывания, отправленный ему из другого потока», означает ли это, когда потоки вызовов lockInterruptibly() будут ждать сигнала прерывания из другого потока, если блокировка не доступна сразу завладеть им ?. Поток, который посылает сигнал прерывания, удерживает блокировку до тех пор, пока она не прерывает сигналы? – MKod

+0

Любой поток может прерывать поток, он не должен быть тем, у кого есть блокировка. –

+0

Прерывания потока Java отличаются от прерываний аппаратного обеспечения или операционной системы. Доставка прерываний является синхронной и не превентивной, а не асинхронной и превентивной, т. Е. Они не встречаются в произвольной точке и не приостанавливают (и затем возобновляют) код запуска. Программа должна проверить их явно. Итак, вы говорите, что 'lockInterruptibly' постоянно проверяет их явно? – overexchange

7

lockInterruptibly() может блокироваться, если замок уже удерживается другой нитью и будет ждать, пока замок не будет приобретен. Это то же самое, что и с обычным lock(). Но если другой поток прерывает ожидающий поток, то lockInterruptibly() будет кидать InterruptedException.