Синхронизированный блокировка по конкретному идентификаторуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Синхронизированный блокировка по конкретному идентификатору

Сообщение Anonymous »

У меня есть API REST, в котором есть один метод M, который что -то делает.

, конечно, его называют несколькими потоками, иногда одновременно.

Этот метод 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

}
Это означает, что я намерен использовать Интерниванную версию строки BusinessId в качестве блокировки моего критического раздела кода.
Это будет работать, как и предполагалось? Я так думаю ... но я хочу быть абсолютно уверенным. Интересно, есть ли какое-то готовое решение, как идиоматический способ сделать это на Java, без необходимости реализовать мой собственный кеш, мой собственный механизм выселения и т. Д. и т. Д. < /p>
. Это очень редкий сценарий, два потока, чтобы вызвать метод M с одним идентификатором бизнеса в одном и том же томе (случается только один или два раза в день). Кроме того, критический раздел занимает не более 1-2 секунды для завершения выполнения. Таким образом, задержки, вызванные потоками, ожидающими получения блокировки, это не беспокоит меня здесь.

Подробнее здесь: https://stackoverflow.com/questions/708 ... ticular-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»