Привет. К сожалению не смог решить сам задачу и полез в комменты. Решение уже знаю, но всё же не смог понять разницу. У меня ошибка была в блоке
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?