Нужно знать информацию о блокировке объекта - PullRequest
0 голосов
/ 29 сентября 2011

В Java я создал объект с глобальной областью действия.

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

  • Кришна

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Это невозможно при использовании ключевого слова synchronized на обычных объектах.

Вам необходим объект «блокировки», возможно, один реализующий java.lang.concurrent.locks.Lock , который предлагаетметод tryLock () или аналогичный.

Это позволяет вашему потоку попытаться получить блокировку, возвращая значение true, если блокировка в данный момент не заблокирована в другом месте.

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

0 голосов
/ 29 сентября 2011

Большой проблемой здесь является определение «в настоящее время».

Лучшее, что я могу предложить, - это попытаться получить блокировку с нулевым тайм-аутом.Если вы получаете блокировку, вы уверены, что глобальный объект заблокирован вашим «другим потоком».Если нет, то объект может быть заблокирован или нет каким-либо другим потоком, возможно, это так, но блокировка могла быть снята, когда возвращалась неудачная попытка блокировки.Вы сможете получить более надежные результаты, если во время попытки блокировки вы повысите приоритет своего «другого потока» до максимально возможного.

Если этот тест предназначен для какой-либо временной отладки, оптимизации или статистической цели, тогда отлично, но вы не должны использовать что-либо подобное для реализации поставляемых функций.

Rgds, Martin

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