Java正規タスク--TimerとTimerTaskを

1.プログラムとプログラミング

私たちは、コンピュータプログラムは、人々が特定の要件を満たすようにするために認識してコマンドを実行し、コンピュータ、情報技術のツール上で実行できるコンピュータの集合であることを知っています。

ショートプログラムでは、本質的には、命令のセットで、プログラミングは文字通りに言えば、プログラムによって特定の動作を完了するために、命令(プログラム)のセットを記述することです。

日々のプログラミングでは、我々は必然的に(例えば、アラームが鳴るようにするために)指定した時刻に特定のことを行う方法を、このような状況に遭遇するだろうか?通常達成するためにJavaでタスクを時限、次はJavaでタイミングソースコード解析作業と組み合わされます。

起動スクリプト2.

 上記は、時間とスレッドについての作品です。もちろん、すべての後に、ボーの人々が笑顔のために作品があり、我々は、取得するためのより良い方法を開発する時間を持つことになります。ここでは、我々は一日にしている場合は、次の中でいくつかのアクションを行うために、ということである、(上記のようなアラームが鳴ると)

このスレッドは(私たちは通常、スケジュールされたタスクを使用する傾向この方法を、使用することはお勧めしませんが)寝するための簡単な方法です。

3.Java定期的なタスク

 簡単に言えば、タイマは、2つのコアコンポーネントがあります。

  • TimerThreadはTimerTaskを中スレッド、制御実行タスクキューのための時間です。
  • タスクキューは、アレイ管理TimerTaskをユーティリティクラスです

タイマ露光方法は、コンタクトタイマとTimerTaskを確立するために、主にスケジュールのシリーズです。私たちは、デザインの非常に重要な部分でのJavaの正規タスクは、タスクとタイマーの分離である参照してください。

上記は注意することは、時限タスクポイントを使用した場合、簡単な例です。

  • 複数のTimerTaskをタイマを行ってもよいが、TimerTaskをのみタイマ(TimerTaskを関連この状態スケジュールチェックサム、異なる状態によって決定TimerTaskをライフサイクル())を使用すること。
  • 通常、別のサブクラス拡張TimerTaskをを作成することを検討して、サブクラスTimerTaskを抽象クラスを作成するために、匿名クラスを使用しないでください。
  • 実際のスケジュールは異なる方法または方法のscheduleAtFixedRateタスクが必要です。
  • 合理的な使用は中止とパージ方法。

4.ソース解析

ソースをソートするために、第三の簡単な例の結合部分。

①タイマーとTimerTaskを作成

Timer的核心构造方法,调用此方法时启动,初始化创建的TimerThread线程。

 

 ②执行schedule或scheduleAtFixedRate方法

 其中核心的sched方法,主要是判断线程的状态,TimerTask的状态,然后将通过校验的TimerTask添加到TaskQueue,其后交由TimerThread管理。

③TimerThread原理

时间线程TimerThread中run方法执行的mianLoop方法如上,会一直循环执行。

a.获取TaskQueue中的第一个序列的TimerTask(通过getMin()方法获取),这里很重要,每次循环后TaskQueue序列可能会变化。

b.然后校验TimerTask的状态,移除TaskQueue不需要执行的TimerTask

c.对于能够执行的TimerTask,校验当前时间和执行时间, 通过taskFired标识(表示TimerTask是否就绪,可以执行),(然后处理只执行一次的,从TaskQueue中移除,按频率执行多次的重新排序,详见rescheduleMin方法)。

d.未就绪的TimerTask将wait,而就绪(状态正常且到执行时间的TimerTask)的执行TimerTask的run方法。此时该Timer中的TimerTask执行完毕,后续的就是TimerTask线程逻辑。

④TaskQueue和TimerTask

结合源码可以了解TaskQueue如何排序,以及TimerTask中不同的状态(生命周期)的意义。

4.总结

Java原生的定时任务包括Timer和TimerTask两部分,Timer为主,TimerTask为辅。

Timer中由TimerThread线程控制TimerTask是否执行,Java通过这两个类完成了定时任务的基本功能。

学习时不只是要学习其源码中内部实现,工作原理。更要关注Timer和TimerTask分离的思想,这很重要。

后续学习Java中其他的定时任务,如Spring的定时任务,Quartz。

おすすめ

転載: www.cnblogs.com/masting/p/11627964.html