在做項目的過程中,遇到一個場景:在審批流中,如果上級領導不審批,則在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秒鍾之后執行。看下執行效果:
該任務執行完之后,會有返回值,我們可以通過返回值做其它的邏輯