Насколько дорогая блокировка Java? - PullRequest
1 голос
/ 05 февраля 2009

В общем, как дорого обходится блокировка в Java?

Конкретно в моем случае: у меня есть многопоточное приложение, в котором есть один основной цикл, который снимает объекты с DelayQueue и обрабатывает их (используя poll ()). В какой-то момент другой поток должен будет удалить ошибочные элементы из очереди (используя remove ()).

Учитывая, что remove () встречается относительно редко, я беспокоюсь, что блокировка каждого опроса () приведет к медленному коду. Мои заботы оправданы?

Ответы [ 2 ]

11 голосов
/ 05 февраля 2009

Они неоправданны, если вы не профилируете свое приложение и не обнаружите, что это узкое место.

Вообще говоря, неоспоримая блокировка (то есть блокировки, которые не должны ждать, пока кто-то выпустит ее большую часть времени) стала намного дешевле с некоторыми изменениями в Java 5 и Java 6.

Реализуйте это безопасно и просто, а профиль достаточно быстро.

4 голосов
/ 05 февраля 2009

Вы провели некоторые измерения и обнаружили, что блокировка слишком медленная? Нет? Тогда это не так.

Честно говоря, слишком много людей беспокоятся о слишком многих не относящихся к делу вещах. Сделайте так, чтобы ваш код работал, прежде чем беспокоиться о таких вещах, как, например, «++ i» быстрее, чем «i ++» или тому подобное.

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