java定时任务的两种实现方式
一、Timer
現(xiàn)在項(xiàng)目中用到需要定時(shí)去檢查文件是否更新的功能。timer正好用于此處。
用法很簡單,new一個(gè)timer,然后寫一個(gè)timertask的子類即可。
package comz.autoupdatefile; import java.util.Timer; import java.util.TimerTask; public class M { public static void main(String[] args) { // TODO todo.generated by zoer Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000); } } class MyTask extends TimerTask { @Override public void run() { System.out.println("dddd"); } }這樣,就可以在1秒鐘之后開始執(zhí)行mytask,每2秒鐘執(zhí)行一次。
當(dāng)然,timer的功能也可以通過自己構(gòu)造線程,然后在線程中用sleep來模擬停止一段時(shí)間,然后再執(zhí)行某個(gè)動(dòng)作。
其實(shí),看一下timertask的源碼就立即可以知道,timertask就是實(shí)現(xiàn)了runnable接口的。也就是說,通過timer來間隔一段時(shí)間執(zhí)行一個(gè)操作,也是通過一個(gè)線程來做到的。
【這樣就節(jié)省自己寫線程的時(shí)間啦】
二、Executors
JDK的java.util.concurrent中提供了大量的方法去控制一段代碼定時(shí)執(zhí)行,標(biāo)準(zhǔn)的改寫上面的代碼如下:
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;public class Test6 {public static void main(String[] args) {ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);scheduler.scheduleWithFixedDelay(new Runner(), 1, 2, TimeUnit.SECONDS);}}class Runner implements Runnable {public void run() {System.out.println("yours code");} }這樣,就可以在1秒鐘之后開始執(zhí)行Runner,每2秒鐘執(zhí)行一次。
scheduler下有很多的方法,達(dá)到的目的有:定時(shí)執(zhí)行,執(zhí)行完后一段時(shí)間再次執(zhí)行;而Executors更有更多控制線程的方法,平時(shí)不可忽視。
三、總結(jié)
其實(shí)不管是用Timer還是使用Executors,都是創(chuàng)建了新的線程。
總結(jié)
以上是生活随笔為你收集整理的java定时任务的两种实现方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下实现脚本监测特定进程占用内存
- 下一篇: java中int转成String位数不足