1 / 1 / 0
Регистрация: 16.11.2022
Сообщений: 24

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

15.03.2023, 13:38. Показов 4772. Ответов 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,780
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru