簡潔カリキュラムデザインパターンデザインパターン24-3仲介モデルのソースコードの解析

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。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/1446358788-qq/p/12400199.html