1. 程式人生 > >Java 通過Future來對任務進行取消

Java 通過Future來對任務進行取消

      本節我們將通過Java中的Future實現對於提交的任務進行取消。ExecutorService.submit將返回一個Future來描述任務,Future擁有一個cancel方法,該方法帶有一個boolean型別的引數mayInterruptIfRunning,表示取消操作是否成功(這個引數只是表示任務是否能夠接收中斷,而不是表示任務是否能檢測並處理中斷)。如果mayInterruptIfRunning為true並且任務當前正在某個執行緒中執行,那麼這個執行緒能被中斷;如果這個引數是false,那麼意味著“若任務還沒有啟動,就不要執行它”,這種方式應該用於那些不處理中斷的任務中。

package test;

import java.util.concurrent.*;

/**
 * @Auther: fishing
 * @Date: 2018/10/14 18:05
 * @Description:
 */
public class CancelFutureTask {

    private ExecutorService taskExec = Executors.newCachedThreadPool();

    public void timedRun(Runnable r, long timeout, TimeUnit unit) throws InterruptedException{
        Future<?> task = taskExec.submit(r);
        try {
            task.get(timeout,unit);// 定時獲取,超時之後將取消任務
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } finally {
            // 如果任務已經結束,那麼執行取消操作也不會帶來任何影響
            // 如果讓任務正在執行,那麼將被中斷
            task.cancel(true);
        }
    }


}