この記事では、春のスケジュールされたタスク 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:
使用前必须得先调用initialize()
【初始化方法】
有shutDown()
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);
3. scheduleAtFixedRate(Runnable task, long period);
追記:前のサイクルが完了したかどうかに関係なく、時間になると次のサイクルの実行が開始されます
4, scheduleAtFixedRate(Runnable task, Date startTime, long period);
scheduleWithFixedDelay(実行可能なタスク、長い遅延) ;
🎜🎜🎜即時実行、周期タスク、間隔期間(ミリ秒タイミング)を指定🎜🎜🎜🎜PS:🎜🎜前のサイクルの実行後、待機します遅延時間を指定し、次のサイクルが実行を開始します🎜🎜🎜6, scheduleWithFixedDelay(Runnable task, Date startTime, long late);
🎜🎜🎜実行を開始する時間を指定し、タスクをサイクルし、指定しますインターバル期間 (ミリ秒のタイミング) 🎜🎜🎜🎜 PS: 🎜🎜前のサイクルが実行された後、遅延時間待つと、次のサイクルが開始されます 🎜🎜🎜。 TaskScheduler の下にある 5 つの実装クラスです🎜🎜🎜🎜🎜🎜1 . ConcurrentTaskScheduler🎜🎜🎜 は現在のスレッドでタスクを実行します。タスクが単純な場合は、このクラスを直接使用して実行できます。速くて便利。 🎜🎜🎜🎜PS:🎜🎜これはシングルスレッド操作です🎜🎜🎜rrreee🎜🎜🎜2、DefaultManagedTaskScheduler🎜🎜🎜現在のスレッドでタスクを実行します。これはサブクラスですConcurrentTaskScheduler の JNDI サポートが追加されました。 ConcurrentTaskScheduler と同様に、JNDI を使用して🎜🎜🎜3 のデフォルト実装クラスと ThreadPoolTaskScheduler🎜🎜🎜TaskScheduler インターフェースを個別に設定し、マルチスレッドのスケジュールされたタスクを実行する必要があります。実行スレッド プールの数を設定できます (デフォルトは 1 スレッド)。 🎜🎜🎜🎜追記: 🎜🎜🎜initialize() code> を呼び出す必要があります [初期化メソッド]🎜🎜🎜<li>🎜<code>shutDown()
メソッドがあり、実行後にスレッドを閉じることができます🎜🎜🎜🎜🎜rrreee🎜🎜🎜4.TimerManagerTaskScheduler🎜🎜これは使用されません, 詳しいことは分からないので、時間ができたら追記します。詳しい方は追加よろしくお願いします。 🎜🎜🎜🎜概要🎜🎜🎜🎜🎜🎜🎜🎜上記は、春のスケジュールされたタスクtaskSchedulerのコード例の詳細な紹介です。その他の関連コンテンツについては、PHP中国語Webサイト(www.php.cn)を参照してください。 )! 🎜🎜🎜🎜🎜🎜