使用ScheduledExecutorService實現任務延遲


在做項目的過程中,遇到一個場景:在審批流中,如果上級領導不審批,則在10分鍾后自動審批。也就是要做一個任務在多長時間后執行的效果

在不斷的摸索中,想到了使用線程池,發現有個ScheduledExecutorService可以實現,現將實現過程記錄下來

/**
 * 測試延遲執行任務(只執行一次)
 */
public class TestScheduledExecutor {

    public static void main(String[] args) {
        System.out.println("創建任務時間:" + new Date());
        // 創建一個定長線程池,支持定時及周期性任務執行
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        // 建立一個延時任務,10秒鍾之后執行
        ScheduledFuture<String> futrue = executor.schedule(new MyTask("haha"), 10, TimeUnit.SECONDS);
        try {
            // 如果任務執行完成,future.get()方法會返回一個null。注意,future.get()方法會產生阻塞
            System.out.println(futrue.get());
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 當前線程執行完之后,關閉與線程池的連接
        executor.shutdown();
    }

}

class MyTask implements Callable<String> {

    private String name;

    public MyTask(String name) {
        super();
        this.name = name;
    }

    @Override
    public String call() throws Exception {
        System.out.println("任務開始執行時間:" + new Date());
        return name;
    }
}

這里設置的是10秒鍾之后執行。看下執行效果:

該任務執行完之后,會有返回值,我們可以通過返回值做其它的邏輯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM