1ソースの決意
1.1 ソース分解能1 (JDK定期的なタスクアプリケーションクラスを呼び出します)
1ソースの決意
1.1 ソース分解能1 (JDK定期的なタスクアプリケーションクラスを呼び出します)
スケジュール過負荷、SCHE最後トーン方法、方法のタイミングでタイマーにschedの方法は、様々なタスクTimerTaskをのtaskqueを調整することが理解されよう。メディエータータイマーであることを理解し、特にTimerTaskをタイミングタスクです。
タイマー:
// // ソースコードはのIntelliJ IDEAでの.classファイルから再作成 // (Fernflower逆コンパイラによって供給) // パッケージjava.utilの。 輸入java.util.concurrent.atomic.AtomicInteger; パブリック クラスタイマー{ 民間 最終タスクキューキュー。 民間 最終TimerThreadスレッド。 民間 最終オブジェクトthreadReaper。 プライベート 静的 最終のAtomicInteger nextSerialNumberは= 新しいのAtomicInteger(0 ); プライベート 静的の int型のserialNumber(){ リターンnextSerialNumber.getAndIncrement(); } パブリックタイマ(){ この( "Timer-" + のserialNumber())。 } 公共タイマ(ブールVAR1){ この( "Timer-" + のserialNumber()、VAR1)。 } 公共タイマ(文字列VAR1){ この .queue = 新しいタスクキュー()。 この .thread = 新しい TimerThread(この.queue)。 この .threadReaper = 新しいオブジェクト(){ 保護 ボイドファイナライズ()スローのThrowable { 同期(タイマ。この.queue){ タイマー。この .thread.newTasksMayBeScheduledは= 偽; タイマー。この.queue.notify(); } } }。 この.thread.setName(VAR1)。 この.thread.start(); } 公共タイマ(文字列VAR1、ブールVAR2){ この .queue = 新しいタスクキュー()。 この .thread = 新しい TimerThread(この.queue)。 この .threadReaper = 新しいオブジェクト(){ 保護 ボイドファイナライズ()はスローたThrowable { 同期(タイマ。この.queue){ タイマー。この .thread.newTasksMayBeScheduledは= 偽; タイマー。この.queue.notify(); } } }。 この.thread.setName(VAR1)。 この.thread.setDaemon(var2の); この.thread.start(); } 公共 のボイド スケジュール(TimerTaskをVAR1、長いvar2の){ 場合(var2の<0L ){ スロー 新しい例外:IllegalArgumentException( "負の遅延を。" ); } 他{ this.sched(VAR1、のSystem.currentTimeMillis()+ VAR2、0L )。 } } 公共 ボイドスケジュール(TimerTaskをVAR1、日付VAR2){ この .sched(VAR1、var2.getTime()、0L )。 } 公共 ボイドスケジュール(TimerTaskをVAR1、長い VAR2、長いですVAR4){ 場合(var2の<0L ){ スロー 新しい例外:IllegalArgumentException( "負の遅延を。" ); } 他の 場合(VAR4 <= 0L ){ スロー 新しいはIllegalArgumentException( "非正期間" )。 } 他{ この .sched(VAR1、のSystem.currentTimeMillis()+ VAR2、 - VAR4)。 } } 公共 ボイドスケジュール(TimerTaskをVAR1、日付VAR2、長いVAR3){ 場合(VAR3 <= 0L ){ スロー 新しいはIllegalArgumentException(「非正期間。」); } 他{ この .sched(VAR1、var2.getTime()、 - VAR3)。 } } 公共 ボイド scheduleAtFixedRate(TimerTaskをVAR1、長い VAR2、長いVAR4){ 場合(VAR2 <0Lが){ スロー 新しいはIllegalArgumentException( "負の遅延を。" ); } 他の 場合(VAR4 <= 0L ){ スロー 新しいはIllegalArgumentException( "非正期間。")。 }他{ この .sched(VAR1、のSystem.currentTimeMillis()+ VAR2、VAR4)。 } } 公共 ボイド scheduleAtFixedRate(TimerTaskをVAR1、日付VAR2、長いVAR3){ 場合(VAR3 <= 0L ){ スロー 新しいはIllegalArgumentException( "非正期間" )。 } 他{ この.sched(VAR1、var2.getTime()、VAR3)。 } } プライベート ボイド SCHED(TimerTaskをVAR1、長い VAR2、長いVAR4){ 場合(var2の<0L ){ スロー 新しい例外:IllegalArgumentException( "不正な実行時間を。" ); } 他{ 場合(Math.abs(VAR4)> 4611686018427387903L ){ VAR4 >> = 1 。 } タスクキューvar6は = この.queueと、 同期(この.queue){ 場合(!この.thread.newTasksMayBeScheduled){ スロー 新しいを IllegalStateExceptionを( "タイマーはすでにキャンセルを。" ); } 他{ オブジェクトvar7 = var1.lock。 同期(var1.lock){ 場合(var1.state = 0!){ スロー 新しい IllegalStateExceptionが( "タスクがすでにスケジュールまたはキャンセル" ); } var1.nextExecutionTime = VAR2。 var1.period = VAR4。 var1.state = 1 。 } これ。キューは、.add(VAR1)。 .queue.notify();もし(この .queue.getMin()== VAR1){ この.queue.notify()。 } } } } } 公共 ボイドは(キャンセル){ タスクキューVAR1 = この.queue。 同期(この.queue){ この .thread.newTasksMayBeScheduledは= 偽。 この.queue.clear(); この } } 公共 のintパージ(){ int型 VAR1 = 0 。 タスクキューVAR2は = この.queueを。 同期(この.queue){ ため(INT VAR3 = この .queue.size(); VAR3> 0; - VAR3){ 場合(この .queue.get(VAR3).state == 3 ){ この.queue。 quickRemove(VAR3)。 ++ VAR1; } } もし(VAR1!= 0){ この.queue.heapify()。 } 戻りVAR1。 } } }