|
|
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
Ребят помогите, вот такое задание: Создать программу "Симулятор обменки". Программа позволяет обслуживать до 5 человек одновременно. Каждый человек (отдельный поток) раз в определенное количество времени (для каждого потока оно разное, задать константой) будет покупать или продавать случайное количество валюты. Раз в N времени бухгалтер (еще один поток), выводит отчет о доходе обменки за прошедшее время (доход = разница между текущем количеством гривны и количеством гривны N времени назад + разница между текущем количеством валюты и количеством валюты N времени назад в гривневом эквиваленте по курсу покупки валюты). Как только гривны (или доллара) станет меньше чем потребуется для операции - все валютные операции прекращаются. Бухгалтер фиксирует прибыль и выводит отчет (итоговую прибыль). Не могу понять как сделать покупателей в цикле, и связать их с обьектами потока, вот начал реализацию: public class ObmenkaPotoki { static int hrn = 100000; static int usd = 10000; public static void main(String[] args) throws InterruptedException { long timeD = System.currentTimeMillis(); Thread men = new Peoples(); men.start(); Thread men2 = new Peoples(); men2.start(); Thread men3 = new Peoples(); men3.start(); Thread men4 = new Peoples(); men4.start(); Thread men5 = new Peoples(); men5.start(); long timeU = System.currentTimeMillis(); Thread buhgalter = new Buhgalter(); buhgalter.start(); } static class Peoples extends Thread { @Override public void run() { try { Peoples.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } static class Buhgalter extends Thread{ @Override public void run() { super.run(); } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 23:33 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 11:18 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
IMHO Определится какие у Вас есть классы: People ( "s" на конце на мой взгляд излишне))) ) - имитация человека Buhgalter - поток выводящий/забирающий отчет в заданный интервал времени ChangeOffice - кто собственно будет выполнять обмен Операции/методы, которые должны выполняться в ChangeOffice: bay_baks sell_baks get_report Создать объект ChangeOffice, передать его в экземпляры People, Buhgalter. В экземплярах People и Buhgalter соответственное поле для хранения ChangeOffice. Можно конечно и singleton использовать (не факт, что ChangeOffice может быть только один) У ChangeOffice данные методы должны быть объявлены synchronized. Реализация People и Buhgalter простая как три копейки: У People Код: java 1. 2. 3. 4. 5. 6. Аналогично у бухгалтера: Код: java 1. 2. 3. 4. 5. Как только гривны (или доллара) станет меньше чем потребуется для операции - все валютные операции прекращаются. ...фиксирует прибыль и выводит отчет (итоговую прибыль). Нужен какой-то флаг, который будем ждать в основной программе. Например, в основной программе: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. В методах ChangeOffice bay_baks, sell_baks Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Бухгалтер фиксирует прибыль и выводит отчет (итоговую прибыль). Нафиг бухгалтера. Он будет только за периодические отчеты отвечать. Итоговый отчет выводить отдельно в главном потоке. Как-то так. IMHO. Не проверял. Пишу не задумываюсь, могу где-то ошибаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 11:18 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
А что за ! Interrupted в цикле ? И немного не понял с обьектами, как строится сам класс в вашем примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 12:25 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
Interrupted нашел, а вот как в коде записать покупку, продажу, как сделать что б отдлельный человек отнимал часть от всей суммы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 12:51 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
Azarnoy ! Interrupted в цикле Какой нибудь флаг, по которому мы можем завершить поток. Что бы его по окончанию программы более-менее корректно закрыть, а не прибивать кирпичом по башке. Например, можно использовать вызов метода interrupted() из класса Thread. Конечно, если sleep выкидывает InterruptedException, то возможно можно и просто while( true ), бесконечный цикл, но на мой взгляд, лучше все же параллельно какой-то флаг иметь. Но это IMHO. AzarnoyИ немного не понял с обьектами, как строится сам класс в вашем примере? В смысле "сам класс" ? Если ты про ObmenkaPotoki, то: переменные hrn, usd и всю логику работы с ними вынести в отдельный класс - ChangeOffice. Методы изменяющие данные поля, сделать synchronized. Создать объекты, запустить потоки - тут у тебя все хорошо, но нужно еще сделать ChangeOffice и передать его в потоки. Подождать на changeOffice.wait Напечатать окончательный отчет Попытаться прибить потоки. ( например просто вызовом interrupt() + join для ожидания завершения ) Выйти из программы. В ObmenkaPotoki минимум кода, никаких нафиг static переменных (убрать в ChangeOffice) и, вообще, минимум какой либо логики в main. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 12:54 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Это я понял, я не пойму как в ChangeOffice записать работу с валютой, что б ее вызывать в классе, что б пришел человек, забрал часть, пришел забрал еще часть и тд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 12:57 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
AzarnoyЭто я понял, я не пойму как в ChangeOffice записать работу с валютой, что б ее вызывать в классе, что б пришел человек, забрал часть, пришел забрал еще часть и тд Ну для этого нужно сначала СФОРМУЛИРОВАТЬ правила "работы с валютой" Их в Вашем исходном сообщении не обнаружено. Если валюта продавать/покупать по курсу 1:0. Т.е. бесплатно дарится/забирается. Т.к. никаких правил формирования курса у Вас вроде нет (может не внимательно читал), то вполне пойдет ))) такой обменник времен коммунизма ))) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 13:12 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
а если курс приписать, это куда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 13:17 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
к примеру 24.1 26.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 13:20 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, и у вас показан только доллар, а у меня 2 валюты, и одна должна уменьшатся, другая увеличивается по идее, и останавливатся когда одна из них закончится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 13:25 |
|
||
|
Программа "симулятор обменки" с потоками
|
|||
|---|---|---|---|
|
#18+
Azarnoyи у вас показан только доллар, а у меня 2 валюты, и одна должна уменьшатся, другая увеличивается по идее, и останавливатся когда одна из них закончится В чем проблема добавить вторую валюту? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 13:41 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39148164&tid=2124445]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 447ms |

| 0 / 0 |
