1. はじめに
Java では、完全なスケジュールされたタスクは、Timer と TimerTask の 2 つのクラスによって完了する必要があります。これらは API で次のように定義されます。タイマー: スレッドが将来バックグラウンド スレッドで実行されるタスクをスケジュールするために使用するツールです。タスクは 1 回実行するか、定期的に繰り返すようにスケジュールできます。 By TimerTask: タイマーによって 1 回限りまたは繰り返し実行されるようにスケジュールされたタスク。 Timer はバックグラウンド スレッドで指定されたタスクを計画および実行するために使用されるタイマー ツールであるのに対し、TimerTask は抽象クラスであり、そのサブクラスは Timer によってスケジュールできるタスクを表すことがわかります。
Timer クラス
ツール クラス Timer では、それぞれの構築メソッドがタイマー スレッドを開始すると同時に、複数のスレッドが外部同期なしで 1 つの Timer オブジェクトを共有できるようにすることができます。タイマー クラスはスレッド セーフです。ただし、各 Timer オブジェクトは、すべてのタイマー タスクを順番に実行するために使用される単一のバックグラウンド スレッドに対応するため、通常、スレッド タスクの実行にかかる時間は非常に短いはずですが、特殊な状況により、タイマー タスクの実行時間がが長すぎると、タイマーのタスク実行スレッドを「独占的に」占有し、後続のすべてのスレッドはその実行が完了するまで待機する必要があり、これにより後続のタスクの実行が遅れ、これらのタスクが積み重なることになります。分析は後ほど。
プログラムがタイマーを初期化すると、スケジュールされたタスクが設定した時間に従って実行されます。タイマーは、次のように、さまざまな状況に適応する複数のオーバーロード メソッドを備えたスケジュール メソッドを提供します。 time): 指定された時間に指定されたタスクの実行をスケジュールします。
Schedule(TimerTask task, Date firstTime, long period): 指定された時間に反復固定遅延実行を開始するように、指定されたタスクをスケジュールします。
スケジュール (TimerTask タスク、長い遅延): 指定された遅延後の指定されたタスクの実行をスケジュールします。
スケジュール(TimerTaskタスク、長い遅延、長い期間): 指定されたタスクを、指定された遅延から開始して固定遅延で繰り返し実行するように手配します。
同時に、scheduleAtFixedRate メソッドもオーバーロードされます。scheduleAtFixedRate メソッドは、schedule と同じですが、その違いは後で分析します。
scheduleAtFixedRate(TimerTask task, Date firstTime, long period): 指定したタスクを、指定した時刻に固定レートの繰り返し実行を開始するようにスケジュールします。
scheduleAtFixedRate(TimerTask task, long late, long period): 指定された遅延後に、指定されたタスクが固定レートの繰り返し実行を開始するように手配します。
TimerTask
TimerTask クラスは、1 回限りのタスクまたは繰り返しのタスクのために Timer によってスケジュールされる抽象クラスです。これには、対応するタイマー タスクによって実行される操作を実行するために使用される抽象メソッド run() メソッドがあります。したがって、特定の各タスク クラスは TimerTask を継承し、run() メソッドをオーバーライドする必要があります。
さらに、2 つの非抽象メソッドがあります:
boolean cancel(): このタイマー タスクをキャンセルします。
long selectedExecutionTime(): このタスクの最新の実際の実行のスケジュールされた実行時間を返します。
2. 例:
Naims_task.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/task/spring-task-4.0.xsd"><task:annotation-driven /> <!-- 定时器开关--> <bean id="myTask" class="com.wisoft.jazwfw.convenienceServices.controller.ConvenienceServicesController"></bean> <task:scheduled-tasks> <!-- 这里表示的是每天23点59分执行一次 --><task:scheduled ref="myTask" method="getPubService" cron="0 59 23 * * ?" /> <!-- 这里表示的是每隔十秒执行一次 --><!-- <task:scheduled ref="myTask" method="print" cron="*/10 * * * * ?"/> --> </task:scheduled-tasks> <!-- 自动扫描的包名 --> <context:component-scan base-package="com.wisoft.jazwfw.convenienceServices.controller" /> </beans>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><import resource="spring/Naims_ws.xml" /><import resource="spring/Naims_bo.xml" /><import resource="spring/Naims_dao.xml"/><import resource="spring/Naims_params.xml"/><import resource="spring/Naims_task.xml"/></beans>
以上がJavaのスケジュールされたタスクの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。