Java 通過Future來對任務進行取消
阿新 • • 發佈:2019-01-11
本節我們將通過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); } } }