Ребята обьясните как правильно применять synchronized, из лекций JR да и вообще почитав различные статьи, я понял, что он нужен для того:
1) Чтобы контролировать доступ к помеченном методу или блоку, пока в нем есть поток, он занят и никто другой не может из потоков в него зайти, пока он не освободиться.
2) Чтобы провести синхронизацию данных, то есть если какие то данные в данном блоке или методе изменились, они изменятся для всех других потоков.
Так я понял его применение, но решая задачу level17.lesson10.home04, там где нужно было расставить synchronized в нужных местах, я в упор не понимаю для чего он нужен в методе 3, если для каждого потока который будет вызывать method3 никакой синхронизации не нужно, ведь param не изменяется никак, а переменная random создается для каждого потока.
Так я понял его применение, но решая задачу 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;
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
в syncronized блоке может быть больше 1го потока если внутри блока есть wait() к примеру. потоку будут находится внутри кода и в тоже время внутри wait set. про это валом литературы в интернете.
данные изменяться для все потоков которые синхронизированы по одному и тому же обьекту. если потоки синхронизированы по разным обьектом этого может не быть.
если поток находится внутри блока synchronized то да только один поток может работать и менять к примеру данные ресурса. Остальные потоки дружненько ждут своей очереди, так что для них уже данные будут да обновлены.
насчет почему метод 3 надо синхронизировать это скорее к
разработчика данной задачи. В моем понимании он синхронизирован ради синхронизации)). Вобщем кто то решил что стоит этот метод сделать атомарным на случай если будет еще и сеттер для param.