, конечно, его называют несколькими потоками, иногда одновременно.
Этот метод m имеет входную строку BusinessId < /code>
(который вытекает из полезной нагрузки на коэффициент /клиент). нить Но я хочу защитить его только в том случае, если у меня есть одновременные выполнения по двум потокам T1 и T2 для значения BusinessId . Так что после некоторого думать я решил пойти с этим подходом. < /P>
Код: Выделить всё
public M(){
// non-critical work 1
String bid = businessID.intern();
synchronized (bid){
// do some critical work here
}
// non-critical work 2
}
Это будет работать, как и предполагалось? Я так думаю ... но я хочу быть абсолютно уверенным. Интересно, есть ли какое-то готовое решение, как идиоматический способ сделать это на Java, без необходимости реализовать мой собственный кеш, мой собственный механизм выселения и т. Д. и т. Д. < /p>
. Это очень редкий сценарий, два потока, чтобы вызвать метод M с одним идентификатором бизнеса в одном и том же томе (случается только один или два раза в день). Кроме того, критический раздел занимает не более 1-2 секунды для завершения выполнения. Таким образом, задержки, вызванные потоками, ожидающими получения блокировки, это не беспокоит меня здесь.
Подробнее здесь: https://stackoverflow.com/questions/708 ... ticular-id
Мобильная версия