Банкомат

  • 9
  • Недоступна
Разберись, как работает программа. Во время тестирования лог содержит следующее: ..... Добавляем 1000, на счету 1000 Тратим 100, на счету 800 Тратим 100, на счету 800 Тратим 100, на счету 800 Тратим 100, на счету 700 ..... Создан баг: деньги не правильно списываются со счета. Твоя задача:
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (257)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Владимир
Уровень 28
14 ноября, 21:16
Ага, очень "грамотно": синхронизация по this, где this - NONprivate NONfinal static field. Достаточно написать: account = new BankAccount("Diego"); и синхронизация слетает, а Диего быстро тратит твои бабки, Амиго...
Алексей Щукин
Уровень 24
9 ноября, 15:08
Синхронизировал блок нужных методов по переменной balance, программа работает отлично, но валидатор не принял. Так что синхронизируйте сам(и) метод(ы).
Алексей Щукин
Уровень 24
9 ноября, 14:27
Не сразу понял, что это за конструкция:
private static Thread addMoney = new Thread() {
        @Override
        public void run() {
            while (!isStopped) {
                account.deposit("1000");            //кладем на счет
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    break;
                }
            }
        }
    };
Сначала подумал, что это странный метод какой-то, оказалось это все лишь объявление и инициализация поля. 😂🤣
12 октября, 08:59
Сама задача легкая, но все равно решил со второго раза, т.к. пытался синхронизировать тело методов по balance. Не забывайте что метод синхронизируется гораздо проще. И еще именно на этой задаче заметил что разбираться в коде программы стало легче.
6 сентября, 07:21
Я правильно понимаю что до synchronized у нас списание из balance могло происходить еще до того как туда записывалось до конца зачисление? а то дебагером иду и значения с минусом получаются у balance до synchronize
Viacheslav Paninskii
Уровень 32
4 сентября, 10:14
Обьясните please зачем тут происходит делегирование методов ?
12 октября, 09:01
Чтоб метод срабатывал если в него передают разные типы данных. В данном случае и String, и BigDecimal обработаются.
BlackGrizzli Team
Уровень 30
15 ноября, 14:42
Хм) а я из-за этого синхронизировал только методы со стрингами, подумав, что нефиг ошибатся и вводить числами)) . И как бы все работает и так и так...
Alexandr
Уровень 19
4 июля, 17:13
А вот если синхронизировать не сами методы, а конкретный участок кода в методе, например, где упоминаются одинаковые переменные. Это можно считать правильным решением? Или всё же валидатор прав и необходимо синхронизировать всё сразу? Вывод что так, что так одинаковый.
Loony.java
Уровень 32
24 сентября, 14:36
Тот же вопрос Если засунуть тело метода в блок синхронайз, то вывод такой же, но валидатор ругается
12 октября, 09:03
тоже на этом споткнулся. 2 варианта: либо валик недопилен, либо нас приучают писать понятный неперегруженный код.
20 июня, 18:53
Когда сделал так, чтобы деньги прибавлялись быстрее чем тратились, в консоль было так приятно смотреть, будто это реальные уведомления банка
Reviksedy
Уровень 35
18 марта, 14:27
два последних требования прямо говорят что делать
Nikolay Veselov
Уровень 48
16 марта, 15:21
Сначала сделал через синхронизацию на классе BankAccount, валидатор не принял, хотя работа программы корректная. Остался вопрос, в итоге так можно было делать или нет?
NonGrata
Уровень 46
27 марта, 17:34
Я в методе run() поставил синхронизацию на BankAccount.class и визуально работа даже лучше выглядит чем через решение, любопытно если все таки это объективно корректно или нет,
Anonymous #2856674 Software Developer
27 апреля, 05:07
Если ты на Run поставил синхронизацию на мютекс BankAccount.class , значит ты вообще заблочил одновременное выполнение потоков - ни один из них не может запуститься, пока работает первый Собственно смысл потока вообще исчезает
NonGrata
Уровень 46
27 апреля, 18:13
Тоже верно, если исходить из логики что карта может одновременно использоваться в разных местах и для разных целей (типа одновременно снятия денег с разных мест + в то же время что бы туда деньги заходили тоже)