Java - отменить вызовы в очереди для синхронизированных функций - PullRequest
0 голосов
/ 22 января 2012

Я только начинаю работу с Threads в Java, так что это может быть простой вопрос, но я не смог найти ответ в Интернете.

У меня есть два потока, которые могут вызывать одну синхронизированную функцию. Насколько я понимаю, если второй поток вызывает его, в то время как первый поток уже вызвал его, второй поток будет ждать до завершения первого потока, прежде чем вызвать его. Однако я не хочу, чтобы второй поток вызывал его вообще.

1 Ответ

6 голосов
/ 22 января 2012

Тогда самый простой способ - использовать явную блокировку (ReentrantLock) и вызвать ее метод tryLock().

Если он возвращает true, то это означает, что ни один другой поток не имеет блокировки, и текущий поток получил ее.

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

Не забудьте всегда вызывать unlock() в блоке finally, чтобы убедиться, что блокировка снята даже в случае возникновения исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...