dimaMJ
25 уровень
Craiova

Вопрос про synchronized

Статья из группы Архив info.javarush
Ребята обьясните как правильно применять synchronized, из лекций JR да и вообще почитав различные статьи, я понял, что он нужен для того: 1) Чтобы контролировать доступ к помеченном методу или блоку, пока в нем есть поток, он занят и никто другой не может из потоков в него зайти, пока он не освободиться. 2) Чтобы провести синхронизацию данных, то есть если какие то данные в данном блоке или методе изменились, они изменятся для всех других потоков.
Так я понял его применение, но решая задачу level17.lesson10.home04, там где нужно было расставить synchronized в нужных местах, я в упор не понимаю для чего он нужен в методе 3, если для каждого потока который будет вызывать method3 никакой синхронизации не нужно, ведь param не изменяется никак, а переменная random создается для каждого потока. private double param = Math.random(); private void method0() { double i = method3(); } protected void method1(String param1) { Solution solution = new Solution(); solution.method0(); } public void method2(int param1) { param1++; } double method3() { double random = Math.random(); return random + param; }
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
tanzwud Уровень 34
5 февраля 2015
syncronized используется для так защиты критически важных частей кода.
в syncronized блоке может быть больше 1го потока если внутри блока есть wait() к примеру. потоку будут находится внутри кода и в тоже время внутри wait set. про это валом литературы в интернете.
данные изменяться для все потоков которые синхронизированы по одному и тому же обьекту. если потоки синхронизированы по разным обьектом этого может не быть.
если поток находится внутри блока synchronized то да только один поток может работать и менять к примеру данные ресурса. Остальные потоки дружненько ждут своей очереди, так что для них уже данные будут да обновлены.

насчет почему метод 3 надо синхронизировать это скорее к
разработчика данной задачи. В моем понимании он синхронизирован ради синхронизации)). Вобщем кто то решил что стоит этот метод сделать атомарным на случай если будет еще и сеттер для param.
dimaMJ Уровень 25
5 февраля 2015
Кто нибудь ответит ?)