Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 16.11.2022
Сообщений: 24

Необходимо разработать многопоточное приложение на Java

15.03.2023, 13:38. Показов 5019. Ответов 23

Студворк — интернет-сервис помощи студентам
В общем, друзья, нужна помощь.
Необходимо разработать многопоточное приложение "Банк": имеется банк с кассирами, клиентами и их счетами. Клиент может снимать/пополнять/переводить/оплачивать/обменивать денежные средства. Кассир последовательно обслуживает клиентов. Поток-наблюдатель следит, чтобы в кассах всегда были наличные, при скоплении денег более определенной суммы, часть их переводится в хранилище, при истощении запасов наличных происходит пополнение из хранилища.

При этом:
•использовать возможности, предоставляемые пакетом java.util.concurrent
•не использовать слово synchronized
•вce сущности, желающие получить доступ к ресурсу, должны быть потоками
•использовать возможности ООП
•не использовать графический интерфейс (приложение должно быть консольным)

Я не совсем понимаю как это все реализовать... Буду очень благодарна если поможете с этой задачей.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2023, 13:38
Ответы с готовыми решениями:

Разработать многопоточное приложение. Использовать возможности, предоставляемые пакетом java.util.concurrent
Разработать многопоточное приложение. Использовать возможности, предоставляемые пакетом java.util.concurrent. Не использовать слово...

Многопоточное приложение на Java (Java Thread)
Дано было такое задание: Выполнить приложение командной строки с двумя параметрами , один из которых – количество потоков, другой...

Разработать многопоточное консольное приложение на языке программирования Java
Имеется склад с тремя воротами: для маленьких (3 тонны), средних (5 тонн) и больших (15 тонн) грузовиков. Всего надо вывести 186 т. груза....

23
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
18.03.2023, 00:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от korvin_ Посмотреть сообщение
Не придётся. Подумай ещё.
Ну можно обсервера сделать таким же клиентом. Что-то типо poison pill pattern, но в этом случае recalculation pill. Но все равно сложности с переводом между аккаунтами клиентов остаются.

Не по теме:

Я решил четко по тз, не понимаю к чему претензии. Это моя личная политика использования этого сайта: обучение в рамках ответа на вопросы ну и получение ответов на свои собственные в рамках таких вот дискуссий, тк сколько тем по пограмированию я не создавал, вменяемых ответов не получал, про гуи не в счет - это не я создавал.

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
18.03.2023, 01:42
Цитата Сообщение от Coffeini Посмотреть сообщение
Но все равно сложности с переводом между аккаунтами клиентов остаются.
Никаких сложностей.

Добавлено через 4 минуты
Цитата Сообщение от Coffeini Посмотреть сообщение
Я решил четко по тз
Чётко по ТЗ — это две BlockingQueue на кассе: одна для кассира, другая — для наблюдателя. И всё.
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
18.03.2023, 02:09
Цитата Сообщение от korvin_ Посмотреть сообщение
Никаких сложностей.
А можно хоть какую-то конкретику...
Цитата Сообщение от korvin_ Посмотреть сообщение
Чётко по ТЗ — это две BlockingQueue на кассе: одна для кассира, другая — для наблюдателя. И всё.
Чисто гипотетически: у нас есть семья, у них общий счет. Муж пришел оплатить покупку на 100 рублев, жена пополнить на 1000. Оп, race condition.

Добавлено через 1 минуту
Кассир не один, если что.
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
28.03.2023, 01:50
korvin_, так а че по итогу-то? Какое решение без можно предложить без возникновения критической секции?
Я просто встретил точно такую же проблему в java concurrency in practice 10.1.2 главе. Надо понимать, автор точно также напридумывал себе проблем?

Правда Semaphore не обладает свойством реентерабельности, для этого есть ReentrancyLock. И еще больно уж простое у меня решение вышло. Вероятнее всего в какой-то момент произойдет reordering блоков с уменьшением суммы и прибавлением. Т.е. сумму зачислим, но узнаем, что на счете денег-то нет и вернем false.
Впрочем, сколько разных я тестов не проводил, такого случая не встретил, наверное, просто писать их не умею.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package test;
 
import org.openjdk.jcstress.annotations.*;
import org.openjdk.jcstress.infra.results.I_Result;
 
import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Stream;
 
 
@JCStressTest()
@Outcome(id = {"100"}, expect = Expect.ACCEPTABLE, desc = "OK")
@State
public class Test {
    private static class Account {
        private final ReentrantLock l;
        private int val;
 
        Account(int val) {
            this.l = new ReentrantLock();
            this.val = val;
        }
    }
 
    private final Account bank;
    private final Account[] accounts;
    private final int N = 5;
    private final Random random;
 
    public Test() {
        bank = new Account(100);
        accounts = new Account[N];
        for (int i = 0; i < N; ++i) {
            accounts[i] = new Account(0);
        }
        random = new Random();
    }
 
    private boolean transfer(int val, Account a1, Account a2) {
        a1.l.lock();
        try {
            if (a1.val - val < 0) {
                return false;
            }
            a1.val -= val;
        } finally {
            a1.l.unlock();
        }
        a2.l.lock();
        try {
            a2.val += val;
        } finally {
            a2.l.unlock();
        }
        return true;
    }
 
    @Actor
    public void actor1() {
        Account a;
        for (int i = 0; i < N * N * N; ++i) {
            transfer(100, a = accounts[random.nextInt(N)], a);
        }
    }
 
    @Actor
    public void actor2() {
        for (int i = 0; i < N * N * N; ++i) {
            transfer(50, accounts[random.nextInt(N)], bank);
        }
    }
 
    @Actor
    public void actor3() {
        for (int i = 0; i < N * N * N; ++i) {
            transfer(100, accounts[random.nextInt(N)], accounts[random.nextInt(N)]);
        }
    }
 
    @Actor
    public void actor4() {
        for (int i = 0; i < N * N * N; ++i) {
            transfer(50, bank, accounts[random.nextInt(N)]);
        }
    }
 
    @Arbiter
    public void arbiter(I_Result r) {
        r.r1 = bank.val + Stream.of(accounts).mapToInt(a -> a.val).sum();
    }
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RUN RESULTS:
  Interesting tests: No matches.
 
  Failed tests: No matches.
 
  Error tests: No matches.
 
  All remaining tests: 1 matching test results.
 
.......... [OK] test.Test
 
  Results across all configurations:
 
  RESULT     SAMPLES     FREQ      EXPECT  DESCRIPTION
     100  14 589 576  100,00%  Acceptable  OK
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2023, 01:50

Разработать многопоточное Вин32-приложение
Разработать многопоточное Win32-приложение, которое использует диалоговое окно для управления потоками процессов. Дизайн диалогового окна...

Разработать многопоточное приложение, которое моделирует работу универмага
Здраствуйте, задали написать многопоточное приложение , я всю голову сломал читал и Шеховцова и читал об этом на РСДНе)но понять не...

Необходимо создать многопоточное приложение в соответствие со схемой взаимодействия отдельных потоков
Нужна помощь, срочно 1. необходимо создать многопоточное приложение в соответствие со схемой взаимодействия отдельных потоков (в...

Разработать многопоточное Win32-приложение, синхронизирующее работу трех вторичных потоков
Разработать многопоточное Win32-приложение, синхронизирующее работу трех вторичных потоков:  первый помещает данные типа Type в...

Разработать многопоточное оконное приложение Windows Forms для обработки файла
Разработать многопоточное оконное приложение Windows.Forms для обработки файла в соответствии с заданием 1. Потоки выполнения: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru