Прервать все ожидающие потоки с помощью реентрантной блокировки Java - PullRequest
0 голосов
/ 20 апреля 2020

Есть ли способ, которым я мог бы прервать все потоки, ожидающие блокировки, если у потока, который уже получил блокировку, есть какое-то исключение?

1 Ответ

1 голос
/ 20 апреля 2020

Я не думаю, что есть хороший способ.

Если вы создали подкласс ReentrantLock, этот класс мог бы вызвать getQueuedThreads(), повторить полученную коллекцию и вызвать interrupt() для каждого из них. , Однако это может быть чревато гоночными условиями. Например, если другой поток пытается получить блокировку во время выполнения этой операции, нет гарантии, что вы увидите этот поток.

Вторая проблема заключается в определении того, где и по какому поводу будет обнаружено исключение.

...