Привет.
К сожалению не смог решить сам задачу и полез в комменты. Решение уже знаю, но всё же не смог понять разницу.
У меня ошибка была в блоке
static {
synchronized (president){ //Тут ошибка. Правильно (synchronized (OurPresident.class)
president = new OurPresident();
}
}
Поясните пожалуйста разницу.
До этого была лекция https://javarush.com/quests/lectures/questcore.level07.lecture03 (в низу), где есть пример синхронизации статичесткого метода.public static void swap2()
{
synchronized (MyClass.class)
{
String s = name1;
name1 = name2;
name2 = s;
}
Похоже я совсем не верно понял данную конструкцию. У меня вопрос, чем мой вариант не правилен (synchronized (president))? Переменная president и так статическая. И правильно ли я понял, что если мы собираемся в методе использовать что-либо статическое и нам требуется этот метод синхронизировать, то всегда теперь прописывать NameClass.class?package com.javarush.task.task17.task1706;
/*
Синхронизированный президент
*/
public class Solution {
public static void main(String[] args) {
OurPresident expectedPresident = OurPresident.getOurPresident();
OurPresident ourPresident = OurPresident.getOurPresident();
System.out.println(expectedPresident == ourPresident);
}
}
переменная(ссылка) allPeople типа List<Person>, которая ссылается на новый экземпляр класса new ArrayList<Person>(); Но вот тут я похоже чего-то не понимаю. Объект нельзя использовать это в статическом контексте. Или нет?