powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java предупреждения при Synhronized
14 сообщений из 14, страница 1 из 1
Java предупреждения при Synhronized
    #37760435
lokoArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. У меня вопрос есть. При анализе Idea выкидывает мне предупреждения. Но я не могу понять почему.

У меня есть HashMap, я его передаю в метод другого класса. И там примерно следующий код:
final object obj = map.get(id);
if(obj != null) {
synchronized (obj) {
newobj.firstObject = obj.firstObject;
newobj.secondObject = obj.secondObject;
map.put(id, newobj)
}
}

Я получаю следующее предупреждение:"synchronized on a local variable java". Почему?
У меня примерно вот такое понимание что происходит:
1) При map.get(id) я получаю ссылку. И если я в ней что-нибудь поменяю, то поменяется значение в map. Или я не прав?
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760498
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто warning, чтобы девелопер лишний раз перепроверил. С другой стороны это бесполезная инспекция, её можно отключить. synchronized в новых версиях Java почти игнорируется, если фактической конкуренции не будет.
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760524
lokoArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое. И еще тогда вопрос.
Blazkowicz synchronized в новых версиях Java почти игнорируется, если фактической конкуренции не будет.
Я так понимаю игнорируется в RunTime ?
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760547
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lokoArtЯ так понимаю игнорируется в RunTime ?
Да
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760627
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lokoArt,

какой смысл синхронизироваться по obj, если он не модифицируется? и почему нет синхронизации по объектам, которые действительно модифицируются?
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760640
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqкакой смысл синхронизироваться по obj, если он не модифицируется?

Синхронизация проиходит по экземпляру объекта. Финальность переменной ни на что не влияет вообще.

rfqи почему нет синхронизации по объектам, которые действительно модифицируются?
?
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760648
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще я бы тут ещё несколько раз подумал об этом коде вообще. Потому как он выглядит бессмысленным.
Читаем JavaDoc HashMap:

If multiple threads access a hash map concurrently, and at least one of
the threads modifies the map structurally, it <i>must</i> be
synchronized externally. (A structural modification is any operation

Какой смысл тогда синхронизировать по id, если 2 потока по разным id вызовут параллельный put, что приведет к ошибке.

А если put операцию в любом случае нужно синхронизировать между всем потоками. То зачем тогда синхронизировать по id?
Расскажите какую цель вы преследуете и какую проблему решает ваш код.
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760675
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Если пофантазировать, то можно предположить, что методы firstObject и secondObject не потокобезопасные. Так же по объектам хранящимся в map может выполняться синхронизация в других частях программы.
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760681
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenBlazkowicz,

Если пофантазировать, то можно предположить, что методы firstObject и secondObject не потокобезопасные. Так же по объектам хранящимся в map может выполняться синхронизация в других частях программы.

ну и HashMap еще может быть синхронизированной, тогда все ок, но вот что-то мне подсказывает, что на самом деле все совсем не так )
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760682
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenЕсли пофантазировать

:) Удачи.
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760754
lokoArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВообще я бы тут ещё несколько раз подумал об этом коде вообще. Потому как он выглядит бессмысленным.
Читаем JavaDoc HashMap:

If multiple threads access a hash map concurrently, and at least one of
the threads modifies the map structurally, it <i>must</i> be
synchronized externally. (A structural modification is any operation

Какой смысл тогда синхронизировать по id, если 2 потока по разным id вызовут параллельный put, что приведет к ошибке.

А если put операцию в любом случае нужно синхронизировать между всем потоками. То зачем тогда синхронизировать по id?
Расскажите какую цель вы преследуете и какую проблему решает ваш код.

Я думал так: Я не хочу чтобы какой-нибудь поток изменил мне поля firstObject и secondObject.
Если этот код будет без synchronized, то получится что я считаю....
Эм... Получается смысла. Нет?!!! Я сейчас только понял. Я же при присваивании ссылки получаю на объекты.
А put должен сам синхронизовать все.... Я правильно понял?
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760775
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lokoArtЯ думал так: Я не хочу чтобы какой-нибудь поток изменил мне поля firstObject и secondObject.

Mutability и Concurrency это две разные темы.

lokoArtЕсли этот код будет без synchronized, то получится что я считаю....
Эм... Получается смысла. Нет?!!! Я сейчас только понял. Я же при присваивании ссылки получаю на объекты.

Так и я о том же. Смысла не много. Предлагаю более четко озвучить проблему.

lokoArtА put должен сам синхронизовать все.... Я правильно понял?
Это вы как-то много от "put" хотите.
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37760800
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lokoArtЯ думал так: Я не хочу чтобы какой-нибудь поток изменил мне поля firstObject и secondObject.


О. Так я угадал.
Тогда надо так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Map map = Collections.synchronizedMap(new HashMap());

// и далее все как было 
if(obj != null) {
  synchronized (obj) {
    newobj.firstObject = obj.firstObject;
    newobj.secondObject = obj.secondObject;
    map.put(id, newobj)
  }
}
...
Рейтинг: 0 / 0
Java предупреждения при Synhronized
    #37762230
lokoArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lokoArtА put должен сам синхронизовать все.... Я правильно понял?
Это вы как-то много от "put" хотите.[/quot]

Ссори, я не правильно написал там не HashMap а HashTable. А HashTable уже сама потокобезопасная насколько я понимаю.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java предупреждения при Synhronized
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]