ホームページ  >  記事  >  Java  >  春のスケジュールされたタスク taskScheduler のコード例の詳細な紹介

春のスケジュールされたタスク taskScheduler のコード例の詳細な紹介

黄舟
黄舟オリジナル
2017-03-06 10:32:462115ブラウズ

この記事では、春のスケジュールされたタスク taskScheduler に関する情報を主に紹介しており、必要な方は参考にしていただければと思います。

はじめに

ご存知のとおり、春のバージョン 3.0 以降には、スケジュールされたタスク ツールが付属しています。これは、設定ファイルを必要とせず、実行ステータスを動的に変更できる、シンプルで便利な機能です。 cron 式を使用して、スケジュールされたタスクを設定することもできます。

実行されるクラスはRunnableインターフェースを実装する必要があります

TaskSchedulerインターフェース

TaskSchedulerはインターフェースであり、TaskSchedulerインターフェースの下に6つのメソッドが定義されています


1、 (実行可能タスク、トリガートリガー);schedule(Runnable task, Trigger trigger);

指定一个触发器执行定时任务。可以使用CronTrigger来指定Cron表达式,执行定时任务

 CronTrigger t = new CronTrigger("0 0 10,14,16 * * ?");
 taskScheduler.schedule(this, t);

2、schedule(Runnable task, Date startTime);

指定一个具体时间点执行定时任务,可以动态的指定时间,开启任务。只执行一次。(比Timer好用多了。早发现这接口就好了。。。)

3、scheduleAtFixedRate(Runnable task, long period);

立即执行,循环任务,指定一个执行周期(毫秒计时)

PS:不管上一个周期是否执行完,到时间下个周期就开始执行

4、scheduleAtFixedRate(Runnable task, Date startTime, long period);

指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)

PS:不管上一个周期是否执行完,到时间下个周期就开始执行

5、scheduleWithFixedDelay(Runnable task, long delay);

立即执行,循环任务,指定一个间隔周期(毫秒计时)

PS:上一个周期执行完,等待delay时间,下个周期开始执行

6、scheduleWithFixedDelay(Runnable task, Date startTime, long delay);

指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)

PS:上一个周期执行完,等待delay时间,下个周期开始执行

TaskScheduler下有五个实现类


1、ConcurrentTaskScheduler

以当前线程执行任务。如果任务简单,可以直接使用这个类来执行。快捷方便。

PS:这是单线程运行

public class LocTest implements Runnable {
 private ConcurrentTaskScheduler tpts = new ConcurrentTaskScheduler();
 private void start() {
tpts.schedule(this, new Date());
 }
 public void run() {
Thread ct = Thread.currentThread();
System.out.println("current id:"+ct.getId());
System.out.println("current name:"+ct.getName());
 }
 public static void main(String[] args) {
new LocTest().start();
 }
}

2、DefaultManagedTaskScheduler

以当前线程执行任务,这是ConcurrentTaskScheduler的子类,添加了JNDI的支持。和ConcurrentTaskScheduler一样的用法,需要使用JNDI可以单独设置

3、ThreadPoolTaskScheduler

TaskScheduler接口的默认实现类,多线程定时任务执行。可以设置执行线程池数(默认一个线程)。

PS:

  1. 使用前必须得先调用initialize() 【初始化方法】

  2. shutDown()

  3. スケジュールされたタスクを実行するトリガーを指定します。 CronTrigger を使用して、スケジュールされたタスクを実行する Cron 式を指定できます

public class LocTest implements Runnable {
private ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
private void start() {
taskScheduler.setPoolSize(10);
//必须得先初始化,才能使用
taskScheduler.initialize();
taskScheduler.schedule(this, new Date());
}
public void run() {
Thread ct = Thread.currentThread();
System.out.println("current id:"+ct.getId());
System.out.println("current name:"+ct.getName());
}
public static void main(String[] args) {
new LocTest().start();
}
}

2, schedule(Runnable task, Date startTime);

スケジュールされたタスクを実行する特定の時点を指定します。タスクを開始する時刻を動的に指定できます。実行されるのは 1 回だけです。 (Timer よりもはるかに使いやすいです。もっと早くこのインターフェースを発見していればよかったと思います...)

3. scheduleAtFixedRate(Runnable task, long period);

即時実行、タスクの循環、 1 つの実行サイクル (ミリ秒のタイミング) を指定します

追記:

前のサイクルが完了したかどうかに関係なく、時間になると次のサイクルの実行が開始されます

4, scheduleAtFixedRate(Runnable task, Date startTime, long period);

🎜実行開始時刻を指定、タスクを循環、間隔期間(ミリ秒タイミング)を指定🎜🎜🎜🎜 PS:🎜🎜前のサイクルが完了したかどうかに関係なく、時間になると次のサイクルの実行が開始されます🎜🎜🎜5. scheduleWithFixedDelay(実行可能なタスク、長い遅延) ;🎜🎜🎜即時実行、周期タスク、間隔期間(ミリ秒タイミング)を指定🎜🎜🎜🎜PS:🎜🎜前のサイクルの実行後、待機します遅延時間を指定し、次のサイクルが実行を開始します🎜🎜🎜6, scheduleWithFixedDelay(Runnable task, Date startTime, long late);🎜🎜🎜実行を開始する時間を指定し、タスクをサイクルし、指定しますインターバル期間 (ミリ秒のタイミング) 🎜🎜🎜🎜 PS: 🎜🎜前のサイクルが実行された後、遅延時間待つと、次のサイクルが開始されます 🎜🎜🎜。 TaskScheduler の下にある 5 つの実装クラスです🎜🎜🎜🎜🎜🎜1 . ConcurrentTaskScheduler🎜🎜🎜 は現在のスレッドでタスクを実行します。タスクが単純な場合は、このクラスを直接使用して実行できます。速くて便利。 🎜🎜🎜🎜PS:🎜🎜これはシングルスレッド操作です🎜🎜🎜rrreee🎜🎜🎜2、DefaultManagedTaskScheduler🎜🎜🎜現在のスレッドでタスクを実行します。これはサブクラスですConcurrentTaskScheduler の JNDI サポートが追加されました。 ConcurrentTaskScheduler と同様に、JNDI を使用して🎜🎜🎜3 のデフォルト実装クラスと ThreadPoolTask​​Scheduler🎜🎜🎜TaskScheduler インターフェースを個別に設定し、マルチスレッドのスケジュールされたタスクを実行する必要があります。実行スレッド プールの数を設定できます (デフォルトは 1 スレッド)。 🎜🎜🎜🎜追記: 🎜🎜🎜
  1. 🎜initialize() code> を呼び出す必要があります [初期化メソッド]🎜🎜🎜<li>🎜<code>shutDown()メソッドがあり、実行後にスレッドを閉じることができます🎜🎜🎜🎜🎜rrreee🎜🎜🎜4.TimerManagerTaskScheduler🎜🎜これは使用されません, 詳しいことは分からないので、時間ができたら追記します。詳しい方は追加よろしくお願いします。 🎜🎜🎜🎜概要🎜🎜🎜🎜🎜🎜🎜🎜上記は、春のスケジュールされたタスクtaskSchedulerのコード例の詳細な紹介です。その他の関連コンテンツについては、PHP中国語Webサイト(www.php.cn)を参照してください。 )! 🎜🎜🎜🎜🎜🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。