Ребята обьясните как правильно применять 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; }