Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки ExecutorService / 4 сообщений из 4, страница 1 из 1
21.03.2015, 13:37
    #38911915
goldenhawk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки ExecutorService
Создаю потоки :

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)
завершился текущий поток и все остальные пять потоков.


Спасибо.
...
Рейтинг: 0 / 0
21.03.2015, 17:05
    #38912003
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки ExecutorService
Используйте подсветку кода, чтобы его можно читать.
Прочитайте JavaDoc к методы Thread.interrupted() чтобы понять что он делает.
При использовании ExecutorService не нужно вручную управлять потоками. Вы как пользователь API оперируете задачами. А ExecutorService распределяет их выполнение по потокам.
Вероятно вам нужно сами задачи останавливать а не потоки? Для этого достаточно return использовать чтобы выйти из run() метода.
...
Рейтинг: 0 / 0
21.03.2015, 19:12
    #38912056
goldenhawk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки ExecutorService
BlazkowiczВероятно вам нужно сами задачи останавливать а не потоки? Для этого достаточно return использовать чтобы выйти из run() метода.
метод run() переопределен из интерфейса Runnable, и возвращает void.
Или может вывести сообщение и закончить работу программы, чтоб все потоки остановились, в условии
Код: java
1.
if (account.getBalance()<=0 || account.getBalance()>=100)

???

Вообще же
Код: java
1.
executors.shutdown() 

остановливает потоки ExecutorService, но он же в main прописан. Можно ли его в run() прописать?

Спасибо
...
Рейтинг: 0 / 0
24.03.2015, 23:45
    #38915762
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки ExecutorService
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
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки ExecutorService / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]