亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java TimerTask取消不起作用

Java TimerTask取消不起作用

幕布斯6054654 2021-08-19 18:47:42
使用 ScheduledExecutorService 嘗試 TimerTask。安排一個延遲 10 秒的任務,并調用 task.cancel。但是任務仍在運行,不確定會發生什么,并且取消方法似乎沒有執行任何取消操作。請幫忙。package xxx.xxx;import java.util.TimerTask;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class Tester {    static class OrderWaveTask extends TimerTask{        public void run() {            System.out.println("hi");        }    }    public static void main(String[] args) {        ScheduledExecutorService orderWaveTP = Executors.newScheduledThreadPool(3);        TimerTask task = new Tester.OrderWaveTask();        orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);        System.out.println("cancelling task: "+ task.cancel());    }}
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

您應該使用 ScheduledFuture 取消任務。將您的代碼更改為以下應該使其工作。


ScheduledFuture<?> future = orderWaveTP.schedule(task, 10, TimeUnit.SECONDS);

System.out.println("cancelling task: "+ future.cancel(false));


查看完整回答
反對 回復 2021-08-19
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

TimerTask 旨在與 Timer 類一起使用,以便安排執行和支持取消。

當您通過 Executor 調度 TimerTask 時,您實際上只是告訴 executor 運行一個 Runnable,而控制由 Executor 執行;它不知道您正在運行 TimerTask,因此 TimerTask 函數不起作用。

您的選擇是使用 Timer 而不是 ExecutorService,或者使用 ExecutorService 方法取消執行。


查看完整回答
反對 回復 2021-08-19
  • 2 回答
  • 0 關注
  • 528 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號