Java マルチスレッド -- タイマーの使用 タイマー

高洛峰
リリース: 2016-12-16 13:56:07
オリジナル
1520 人が閲覧しました

携帯電話では、定期的なゴミ掃除や目覚まし時計などのタイミング機能が増えています。タイミング機能は主に Java の Timer オブジェクトを使用し、内部ではマルチスレッド技術を使用します。

主に Time クラスが担当する関数です。スケジュールされたタスクを完了するには、指定された時間の開始時にタスクを実行します。Timer クラスの機能は、スケジュールされたタスクを設定することであり、タスクの内容をカプセル化するクラスは、TimerTask クラスです。継承が必要です run メソッドを実装します。

ドキュメントを確認すると、Timer には次のコンストラクターがあることがわかります:

Java マルチスレッド -- タイマーの使用 タイマーTimer には非常に多くのメソッドがあります:

Java マルチスレッド -- タイマーの使用 タイマーここで、タイマーを使用して単純なメソッドを完了します。プロジェクトの実行後 3 秒後に、目覚まし時計の機能をシミュレートするために「起きる時間です」がコンソールに出力されました。

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);
        
    }
}
ログイン後にコピー

実行後、コンソールにかなりの量のテキストが出力されることがわかりました。 3 秒後、タスクは実行されましたが、プロセスは破棄されず、まだ赤いステータスのままです。原因は何ですか?

この新しいスレッドはデーモンではありません。

In Time クラスと TimerTask クラスの両方に cancel() メソッドがあります。

TimerTask クラスの機能は、タスク キューから自身をクリアすることです (Timer オブジェクトは実行できます)。複数の Timerask タスク)、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 型の時刻、それは早くなります


Java マルチスレッドタイマーの使用法に関する詳細については、次の記事を参照してください。 PHP中国語ウェブサイトです!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート