2015-10-05 66 views
0

包樣本;如何取消執行者的運行任務

import java.util.TimerTask; 
import java.util.concurrent.ArrayBlockingQueue; 
import java.util.concurrent.Future; 
import java.util.concurrent.RejectedExecutionException; 
import java.util.concurrent.ThreadPoolExecutor; 
import java.util.concurrent.TimeUnit; 

public class ThreadPoolExecutorEg { 
    TimerTask timerTask; 
    int oneThread  = 1; 
    long zeroKeepAlive = 0L; 
    int queueDepthOfOne = 1; 

    ThreadPoolExecutor threadPoolExecutor = 
     new ThreadPoolExecutor(
       oneThread, 
       oneThread, 
       zeroKeepAlive, 
       TimeUnit.MILLISECONDS, 
       new ArrayBlockingQueue<Runnable>(queueDepthOfOne) 
     ); 
    private volatile static Future<?> self; 
public static void main(String args[]){ 
    ThreadPoolExecutorEg myTimer = new ThreadPoolExecutorEg(); 
    myTimer.waitAndSweep("A"); 
    myTimer.waitAndSweep("B"); 

    cancel(); 
    myTimer.waitAndSweep("replace"); 
    myTimer.waitAndSweep("B"); 

} 

private static void cancel() { 
self.cancel(true); 
System.out.println(self.isCancelled()); 
} 

public void waitAndSweep(final String caller) { 
    try { 


     timerTask = new TimerTask() { 

     @Override 
     public void run() { 
      try { 
      long waitTime = 1000; 
      if (waitTime > 0){ 
       Thread.sleep(waitTime); 
      } 

      } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
      System.out.println(caller); 
     } 
     }; 

    self = threadPoolExecutor.submit(timerTask); 


    }catch(RejectedExecutionException re){ 
System.out.println(re); 
    } 
    catch (Exception e) { 

    } 
} 
} 

在取消方法中,運行中的任務不會被取消。任何方式來取消正在運行的任務,即使線程正在休眠我想中斷線程從睡眠並殺死整個任務?

取消(true)可能會失敗的情況是什麼?

+1

至少有一半不需要這裏的代碼或什麼都不做。你可以簡化這個例子,使它更容易理解。 –

回答

0

你需要的是List<Future<?>> self;在你的代碼的問題是,你在每一個submit覆蓋self而在需要分開存放submitFuture回報。

也能改變你waitAndSweep方法:

self.add(threadPoolExecutor.submit(timerTask))

+0

雖然這可能是一個問題,但OP一次只提交一個任務並嘗試取消上一個任務。 –

+0

爲什麼我們需要維護未來的清單? – user5367186

+0

看起來像'cancelAll'意.. – harsh

相關問題