МВФ

  • 5
  • Недоступна
Singleton паттерн - синхронизация в методе. Класс IMF - это Международный Валютный Фонд. Внутри метода getFund создайте синхронизированный блок. Внутри синхронизированного блока инициализируйте поле imf так, чтобы метод getFund всегда возвращал один и тот же объект.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (119)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Vladimir Shevchenko 17 уровень, Днепр
2 ноября, 22:45
Подскажите почему не пропускает synchronized(this){...???а только IMF.class?
Evgeny Siganov 18 уровень, Москва
3 ноября, 10:58
потому что метод getFound статический и он не привязан к объекту класса. Соответственно он привязан к классу IMF.class
canny Java Developer
25 сентября, 04:19
if (imf == null) synchronized (imf = new IMF()) {}
всё.
Иван 20 уровень, Рязань
12 октября, 18:34
как так легко? вообще не понятно почему так.... коммент очень помог
Евгений 20 уровень, Краснодар
24 октября, 15:49
В synchronized должен передаваться объект. В "synchronized (imf = new IMF())" выполняется сразу несколько действий. И создание объекта и присвоение его imf, и передача объекта в synchronized
aleksdenni 22 уровень, Полтава
30 октября, 23:47
synchronized (IMF.class) { if (imf == null) { imf = new IMF(); } } Не знал что можно так ))
Druha 23 уровень
6 ноября, 19:33
тоже так решил , т.к. synchronized сильно замедляет, то решил его вставить после if
Артур Прохоренко 19 уровень, Гомель
7 ноября, 09:34
Объясни пожалуйста, что будет, если много потоков обратится к getFund(), я так понимаю, что они все попадут в условие на проверку равенства imf == null, пройдут его и далее все кроме одного зависнут, этот один пройдет и создаст объект, а следом каждый из потоков сделает так же. Т.е. объекты будут пересозданы более 1 раза и это уже не Singleton. Или я не правильно понимаю логику работы предложенного выражения? Попробовал с пятью нитями, так как ты предложил - все работает, все true. Почему - не понимаю...? Спасибо!
Mikhail Kuragin 19 уровень, Красноярск
23 сентября, 14:15
Статью читать внимательно и до конца : https://refactoring.guru/ru/design-patterns/singleton/java/example Ссылка на нее также была ниже. И да, как это не странно звучит, в приватном конструкторе возвращайте null
canny Java Developer
25 сентября, 04:15
зачем null? зачем вообще трогать конструктор?
Виктор 18 уровень, Санкт-Петербург
17 августа, 10:33
-2 попытки, потому что не увидел отельную вкладку IMF
Andrii Plishchuk 22 уровень, Киев
12 августа, 12:40
А когда мы проходили Singleton паттерн???
Дмитрий Ильин 20 уровень, Cheboksary
17 августа, 12:49
на 15-16 уровне для решения задачи просили ознакомиться с этим паттерном
Sergii-K 18 уровень, Ljubljana
22 ноября, 20:02
https://javarush.ru/quests/lectures/questcore.level04.lecture08 https://javarush.ru/tasks/com.javarush.task.task14.task1421#discussion
Александр Назаров 19 уровень, Санкт-Петербург
30 июня, 11:38
Что за очередное гадание на чайной гуще! Можно было в условии, чтобы было более понятно, написать строчку: "в методе IMF getFund() реализуйте синглтон" ?
MR 20 уровень, Харьков
6 июля, 15:55
А разве "один и тот же объект" не говорит о синглтоне? Вообще, я сама ещё недавно ругалась, что мало что понятно, потому что стремилась пробежаться вперед и быстро решить задачу, гнала себя, неведомо куда.А тут остановилась, вникла в задачи, начала подходить к ним, как ребенок к конструкторам и сейчас даже если невнимательность нападает мне уже и не обидно совсем. а по приколу всё
corrente 25 уровень
24 июня, 21:19
imf = new IMF(); imf = null; красота
Егор 18 уровень, Тюмень
25 июня, 06:31
непонятно почему нельзя проинициализировать не создавая новый объект именно в блоке syncronized. в прошлой задаче я создал статик объект за пределами метода и просто приравнял ссылки. тут не прокатывает
Andrew Grini (AG) 17 уровень, Кишинев
28 августа, 07:37
hahaah, по этой же схеме создал), и полез сюда смотреть другие варианты))
Ivan D 33 уровень
28 мая, 13:35
Не работало ничего до тех пор, пока не поменял if (imf.equals(null)) на if (imf == null) Интересно узнать, почему.
Алексей Чумаков 35 уровень, Ногинск
28 мая, 16:10
equals сравнивает объекты , а == ссылки. Нам же надо узнать имеется ли ссылка у объекта. Если нету тобиш равна null (инициализация по умолчанию для объектов), то создаём объект.
Ivan D 33 уровень
28 мая, 16:24
Понял, благодарю!
Vladimir Titov 28 уровень, Тольятти
18 мая, 17:26
Очень долго не мог понять что положить в параметры блоку synchronized. Из комментов вот увидел про IMF.class. Как до этого можно было догадаться? я и переменную imf туда клал и сам метод, в уроке было только this
Иван Плотников 28 уровень, Санкт-Петербург
18 мая, 18:24
В прошлой задаче с этим разбирались. В лекции давали ссылку на эту статью, там в самом конце все описано. Ну и если лень искать то под прошлой задачей есть ещё ссылки: раз и два
Vladimir Titov 28 уровень, Тольятти
19 мая, 07:04
Да, уже по комментам увидел эти статьи. А конкретно эта задача была с пометкой easy - я её делал раньше задачи с президентом
Иван Плотников 28 уровень, Санкт-Петербург
19 мая, 12:34
Ясно. Да есть неувязочка с Изи 🙃. С другой стороны - Изи, это скорее показатель того что задача решается в одно-два действия (условно - 1-2 строчки, а то и один модификатор), а не того знаешь что-то или нет. Не зная про Class.class не решишь задачу будь она Hard, Easy or SuperMegaEasy 😉
Axl NeferSky 35 уровень, Нижний Новгород
8 мая, 00:26
Киньте кто-нибудь ссылкой про synchronized (Class.class), пожалуйста. В уроках, вроде, явно указывалось, что synchronized реализован у наследников Object, и с этим все ясно. А как это действует при указании класса?
Axl NeferSky 35 уровень, Нижний Новгород
8 мая, 01:54
Андрей 33 уровень, Москва
11 мая, 12:54
вот еще
Axl NeferSky 35 уровень, Нижний Новгород
12 мая, 03:13
Класс! Спасибо! К слову - как я понял из статьи, реализация синглтона через класс-холдер заявлена как потокобезопасная, хотя так не выглядит. Что думаете на этот счет?