Рассмотрим следующий метод:Java синхронизируются метод вокруг значения параметра
public void upsert(int customerId, int somethingElse) {
// some code which is prone to race conditions
}
Я хочу защитить этот метод от условий гонки, но это может произойти только тогда, когда два потока с одинаковым customerId
называют его в то же время , Если я сделаю весь метод synchronized
, это уменьшит эффективность и на самом деле не понадобится. Я действительно хочу синхронизировать его вокруг customerId
. Возможно ли это как-то с Java? Есть ли встроенные инструменты для этого или мне нужен Map
из Integers
для использования в качестве замков?
чувствовать себя также свободно советы, если вы думаете, что я делаю что-то здесь :)
Спасибо!
Это, конечно, * чувствует * неправильно. Возможно, вы должны отредактировать свой вопрос, чтобы предоставить более подробную информацию о том, почему * вам нужна синхронизация в первую очередь. –
upsert звучит так, как будто он выполняет некоторую базу данных dml. В этом случае, возможно, вы пытаетесь исправить проблему изоляции транзакций с помощью блокировки? если это так, это будет плохая идея. –
@NathanHughes Я использую старую версию Postgres, где upsert пока недоступен :) –