JavaRush/Курсы/Java Core/Даешь synchronized! Практическая версия

Даешь synchronized! Практическая версия

Открыта

— Привет, Амиго!

9
Задача
Java Core,  7 уровень,  4 лекция
Недоступна
Синхронизированные заметки
Синхронизированные заметки
5
Задача
Java Core,  7 уровень,  4 лекция
Недоступна
Синхронизированные заметки 2
Синхронизированные заметки 2
9
Задача
Java Core,  7 уровень,  4 лекция
Недоступна
Сад-огород
Сад-огород
9
Задача
Java Core,  7 уровень,  4 лекция
Недоступна
Синхронизированный президент
Синхронизированный президент
5
Задача
Java Core,  7 уровень,  4 лекция
Недоступна
МВФ
МВФ
Комментарии (251)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Euraks Backend Developer
вчера, 17:59
com.javarush.task.task17.task1706 и com.javarush.task.task17.task1707 в задаче синхронизация избыточна так как поле статическое, статическое поле инициализируются при создании объекта соответственно не может отсутствовать и не может существовать больше 1 экземпляра
TimJohnzz
Уровень 22
3 октября, 17:43
Забавно читать про шутки singleton и ourPresident в 2026 😶
Grigoryvvv
Уровень 28
Expert
24 сентября, 08:32
24.09.2026 / 27 уровень
27 февраля, 09:56
Как будто бы и не сложно особо
C0N5P1RACY QA Automation Engineer
4 февраля, 18:55
Даешь бан Диего! лишь бы самому бан не получить
Anonymous #3585174
Уровень 33
27 августа 2025, 09:06
Like
Дмитрий
Уровень 6
4 июля 2025, 12:29
Блин, всю голову сломал над OurPresident, прежде чем увидел что этот класс в отдельном файле уже есть 😨. Пора отвлечься.
17 января 2025, 10:50
Всем привет! Не могу дотумкать что не так в моих решениях в последних двух задачах Подскажите/намекните плз )
public static class OurPresident {
    private static OurPresident president;

    private OurPresident() {
    }
    static {
        synchronized (OurPresident.class) {
            president = new OurPresident();
        }
    }

    public static OurPresident getOurPresident() {
        return president;
    }
}
Метод getFund() должен содержать синхронизированный блок. - но блок есть .. Внутри синхронизированного блока должно быть проинициализировано поле imf. - но поле проинициализировано ... и
public static class IMF {
    private static IMF imf;
    private IMF() {
    }

    public static IMF getFund() {
        synchronized (IMF.class) {
            imf = new IMF();
        }
        return imf;
    }
}
Класс OurPresident должен содержать статический блок. - класс содержит блок ... Внутри статического блока класса OurPresident должен быть синхронизированный блок. - блок присутствует ... Внутри синхронизированного блока должно быть проинициализировано поле president. - поле проинициализировано ... Заранее спасибо!
21 января 2025, 15:31
Привет, в обоих случаях нужно присваивать полям значения единожды (только если поле = null). Иначе ничего делать не нужно.
Hack
Уровень 32
3 мая 2025, 12:04
прочитай про double check и все станет понятно
ВК
Уровень 38
10 декабря 2024, 14:15
Поною на валидатор. Задача "Синхронизированный президент". Мой код:
public class OurPresident {
    private static OurPresident president;
    private static Boolean b;

    static {
        synchronized(b) {
            president = new OurPresident();
        }
    }

    private OurPresident() {
    }

    public static OurPresident getOurPresident() {
        return president;
    }
}
Мой код удовлетворяет всем озвученным требованиям задачи, значит его или следовало принять, или сказать, какой именно объект предлагается использовать в качестве мьютексного.
25 февраля 2025, 07:50
ты забыл добавить проверку на null
Viacheslav
Уровень 22
1 ноября 2024, 11:58
Не понимаю, какой объект надо передавать в блок synchronized в этом примере? Почему именно notes? Если я передам туда this ничего же не изменится. Вообще зачем в этот блок что-то передавать, какой в этом смысл? Поток заходит в блок, остальные ждут - тут все ясно. Зачем объект передавать?
public void addNote(int index, String note) {
    System.out.println("Сейчас будет добавлена заметка [" + note + "] На позицию " + index);
    synchronized (notes) {
        notes.add(index, note);
    }
    System.out.println("Уже добавлена заметка [" + note + "]");
}
Віктор
Уровень 17
2 ноября 2024, 20:10
насколько я понимаю проблема будет в том что массив notes объявлен как финальный и будет один и тем же для всех this (объектов). Поэтому если будет доступ с разных потоков то практически будет добавлятся и удаляться элементы с одними и теми же индесами что будет приводить к оибкам а когда мы блокируем сам массив, то сначала один поток сможет добавить или удалить, а затем только лишь другой что будет корректно увеличивать или уменьшать наш массив
Jsuccess
Уровень 30
30 ноября 2024, 17:42
Фактически, ты можешь и синхронизировать объект this, можешь вообще полностью синхронизировать метод, разница будет невелика, поэтому любой из этих вариантов правилен.