Зачем мне вообще создавать отдельный объект мьютекса/блокировки?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Зачем мне вообще создавать отдельный объект мьютекса/блокировки?

Сообщение Anonymous »

Я модифицирую некоторый параллельный код на работе и недавно прочитал документацию Java по внутренним блокировкам и синхронизации.
Учитывая, что каждый объект имеет внутреннюю блокировку, зачем мне вообще создавать отдельную объект в целях контроля доступа к определенному элементу?
Я понимаю, что может быть вариант использования, когда интересующий элемент не является объектом malloc код>, ( vs Integer) и, следовательно, не имеет встроенной блокировки, но... если предположить, что нас интересует синхронизация некоторого статического объекта, есть ли что терять?например:

Код: Выделить всё

public class main {
public static void main (String[] args){
Integer foo = 10;

synchronized(foo){
foo ++;
}
}
}
Если бы я хотел обновить foo из нескольких потоков синхронно, почему бы мне просто не использовать объект, который я хочу изменить? Это менее эффективно? Я вижу множество синхронизированных(this) и отдельных случаев, когда мы можем создать объект блокировки для целей синхронизации:

Код: Выделить всё

public class main {
public static void main (String[] args){
Integer foo = 10;
Object fooLock = new Object();

synchronized(fooLock){
foo ++;
}
}
}
Зачем мне вообще создавать fooLock, если вместо этого я могу использовать объект, представляющий реальный интерес? Действительно ли это не рекомендуется (не идиоматично) или есть практическая причина не делать этого?
Я подумываю о первом подходе (

Код: Выделить всё

synchronized(foo)
) для статического объекта соединения с сокетом, но меня беспокоит то, что я не видел обсуждения этого вопроса. Я что-то упустил?

Подробнее здесь: https://stackoverflow.com/questions/781 ... ock-object
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Libc++abi.dylib: завершение с неперехваченным исключением типа std::__1::system_error: ошибка блокировки мьютекса: невер
    Гость » » в форуме C++
    0 Ответы
    78 Просмотры
    Последнее сообщение Гость
  • Случайность блокировки мьютекса потока
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Случайность блокировки мьютекса потока [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Std::vector.push_back() _иногда_ завершается с ошибкой std::bad_alloc после блокировки мьютекса, что, по-видимому, повре
    Anonymous » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Какова область действия защиты блокировки мьютекса С++?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

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