實現定時任務線程有如下三種方式:
①普通線程死循環
/** * 普通thread * 這是最常見的,創建一個thread,然后讓它在while循環里一直運行着, * 通過sleep方法來達到定時任務的效果,這樣可以快速簡單的實現 */ Thread thread = new Thread(new Runnable() { @Override public void run() { while(true) { System.out.println("普通線程執行中......"); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start();
②使用定時器timer
/** * 與第一種方式相比: * 優勢 1:當啟動和取消任務時可以控制 * 優勢 2:第一次執行任務時可以指定你想要的delay時間 * 在實現時,Timer類可以調度任務,TimerTask則是通過在run()方法里實現具體任務。 * Timer實例可以調度多任務,它是線程安全的。 * */ TimerTask task = new TimerTask() { @Override public void run() { System.out.println("timer線程執行中......"); } }; Timer timer = new Timer(); timer.scheduleAtFixedRate(task, 5000, 1000);
③使用定時調度線程池ScheduledExecutorService
Runnable runnable = new Runnable() { @Override public void run() { System.out.println("定時任務線程執行中......"); } }; ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleWithFixedDelay(runnable, 5000, 500, TimeUnit.MILLISECONDS);