2015-07-01 5 views
3

Я добавлять новые темы, как это с помощью ThreadPoolTaskExecutor:Как остановить все запущенные потоки в ThreadPoolTaskExecutor?

threadPoolTaskExecutor.execute(new Runnable() { 

    @Override 
    public void run() { 
     while(true){ 
      doSomething(); 
     } 

     Thread.sleep(1000); 
    } 

}); 

Все активные потоки не остановить, когда я выключение этого исполнителя:

threadPoolTaskExecutor.shutdown();

Есть вариант, как остановить это активные темы используя ThreadPoolTaskExecutor?

+1

Посмотрите на прерывание потока. –

+0

Thread.stop() it! Возьмите эти нитки и стреляйте, чтобы они узнали, кто их хозяин. –

ответ

2

При создании ThreadPoolTaskExecutor вы должны установить setWaitForTasksToCompleteOnShutdown(false).

По умолчанию false, немедленно завершая работу, прерывая текущие задачи и освобождая очередь.

+0

Спасибо, но я получаю исключение, в котором говорится, что 'java.lang.InterruptedException: sleep interrupted' –

+0

Каждый поток имеет логический флаг, который представляет его прерванный статус. Первоначально для каждого потока этот статус имеет значение false. Если поток прерывается во время прерывистого метода, такого как соединение или спящий режим, он будет разблокировать и выкинуть InterruptedException. Вы должны справиться с этим. – codeaholicguy

+0

@GreenLeie это хорошая статья о работе с InteruptedException http://www.javaspecialists.co.za/archive/Issue056.html – codeaholicguy