|
|
|
Потоки ExecutorService
|
|||
|---|---|---|---|
|
#18+
Создаю потоки : ExecutorService executors = Executors.newFixedThreadPool(6); executors.submit(new MoneyProducer(account)); executors.submit(new MoneyConsumer(account)); executors.submit(new MoneyProducer(account)); executors.submit(new MoneyConsumer(account)); executors.submit(new MoneyProducer(account)); executors.submit(new MoneyConsumer(account)); В самом потоке: @Override public void run() { while(account.getBalance()<100 && account.getBalance()>0 ) { account.consumer(5); if (account.getBalance()<=0 || account.getBalance()>=100) {System.out.println("Balans="+account.getBalance()); Thread.interrupted();} } } MoneyProducer прибавляет 5, MoneyConsumer отнимает 5. Метод consumer в классе Account synchronized,аналогично и для Producer Как сделать, чтобы по достижении условия if (account.getBalance()<=0 || account.getBalance()>=100) завершился текущий поток и все остальные пять потоков. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 13:37 |
|
||
|
Потоки ExecutorService
|
|||
|---|---|---|---|
|
#18+
Используйте подсветку кода, чтобы его можно читать. Прочитайте JavaDoc к методы Thread.interrupted() чтобы понять что он делает. При использовании ExecutorService не нужно вручную управлять потоками. Вы как пользователь API оперируете задачами. А ExecutorService распределяет их выполнение по потокам. Вероятно вам нужно сами задачи останавливать а не потоки? Для этого достаточно return использовать чтобы выйти из run() метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 17:05 |
|
||
|
Потоки ExecutorService
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВероятно вам нужно сами задачи останавливать а не потоки? Для этого достаточно return использовать чтобы выйти из run() метода. метод run() переопределен из интерфейса Runnable, и возвращает void. Или может вывести сообщение и закончить работу программы, чтоб все потоки остановились, в условии Код: java 1. ??? Вообще же Код: java 1. остановливает потоки ExecutorService, но он же в main прописан. Можно ли его в run() прописать? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 19:12 |
|
||
|
Потоки ExecutorService
|
|||
|---|---|---|---|
|
#18+
goldenhawkBlazkowiczВероятно вам нужно сами задачи останавливать а не потоки? Для этого достаточно return использовать чтобы выйти из run() метода. метод run() переопределен из интерфейса Runnable, и возвращает void. ..... Спасибо Из офф доки Future<?> submit(Runnable task) Submits a Runnable task for execution and returns a Future representing that task. The Future's get method will return null upon successful completion. Parameters: task - the task to submit Returns: a Future representing pending completion of the task ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 23:45 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=59&tid=2125657]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
141ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 408ms |

| 0 / 0 |
