首頁 > Java > java教程 > java多執行緒--定時器Timer的使用

java多執行緒--定時器Timer的使用

高洛峰
發布: 2016-12-16 13:56:07
原創
1534 人瀏覽過

定時的功能我們在手機上見得比較多,比如定時清理垃圾,鬧鐘,等等.定時功能在java中主要使用的就是Timer對象,他在內部使用的就是多線程的技術.

Time類主要負責完成定時計劃任務的功能,就是在指定的時間的開始執行某個任務.

Timer類別的作用是設定計劃任務,而封裝任務內容的類別是TimerTask類別.此類是一個抽象類別,繼承需要實作一個run方法.

透過查文檔我們看到Timer有以下幾個建構子:

java多執行緒--定時器Timer的使用

Timer的方法以下這麼多:

java多執行緒--定時器Timer的使用

下面我們透過定時器來完成一個簡單功能,在運行項目三秒後,在控制台打印出"您該起床了",來模擬一下鬧鐘的功能:

package com.wang.reflect;

import java.util.Timer;
import java.util.TimerTask;

class MyTask extends TimerTask{

    @Override
    public void run() {
        System.out.println("您该起床了!!!!");
    }
}
public class TimerDemo {
    public static void main(String[] args) {
        //创建定时器对象
        Timer t=new Timer();
        //在3秒后执行MyTask类中的run方法
        t.schedule(new MyTask(), 3000);
        
    }
}
登入後複製

運行後,我們發現三秒後控制台打印出了相當的文字,但是任務雖然執行完了,進程卻沒有銷毀,還是呈紅色狀態,這是什麼原因呢?

創建了一個Timer就相當於啟動了一個新線程,這個新線程並不是守護線程,所以會一直運行.

在Time類別和TimerTask類別中都有一個cancel()方法.

TimerTask類別中的作用是:將自身從任務隊列中清除,(一個Timer物件可以執行多個Timertask任務)

Timer類別中的作用是:將任務佇列中的全部任務清空. 

下面寫一個實例,定時刪除指定磁碟某個目錄下的所有檔案:

package com.wang.reflect;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


class MyTask extends TimerTask{
/**
 * 定时删除指定位置的文件,(这里以删除f盘下aa文件夹的所有文件为例)
 */
    @Override
    public void run() {
        File file=new File("f://aa");
        deleteFolder(file);
        
    }
    public void deleteFolder(File file){
        File[] files=file.listFiles();
        for(File f:files){
            if(f.isDirectory()){
                //使用递归
                deleteFolder(f);
            }else{
                f.delete();
            }
        }
        file.delete();
    }
    
}
public class TimerDemo {

    public static void main(String[] args) throws ParseException {
        //创建定时器对象
        Timer t=new Timer();
        String time="2016-04-04 11:26:40";
        Date d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time);
        t.schedule(new MyTask(), d);
    }
}
登入後複製

注意,如果在上面測試程式碼中,我給出的Date類型的時間,早於目前的時間.則會立即執行task任務.



更多java多線程--定時器Timer的使用相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板