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

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

15.03.2023, 13:38. Показов 4159. Ответов 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_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru