スレッド睡眠睡眠

睡眠の最初に、役割

Thread.javaで定義された睡眠()。
睡眠()の役割は、現在のスレッドがスリープ状態にできるようにすることです現在のスレッドが「実行状態」から入ります、つまり、「スリープ(ブロック)ステートにします。」睡眠は()睡眠時間を指定し、スリープ時間スレッドはスリープ時間に等しい/よりも大きくすることができる。再スレッドウェイクアップし、CPUが実行をスケジュールするのを待っているように、それは、「ブロック」に「準備完了」となります。

、比較睡眠()と待つ()の

役割待ち()は、「待機(ブロック)状態」に現在のスレッド「実行状態」を可能にすることです、それはまた、同期ロックを解除します。睡眠の役割は、()もに「状態を実行している」現在のスレッドで聞かせている「スリープ(ブロック)ステートにします。」
しかし、待機()は、同期ロックオブジェクトを解放する、および(睡眠)ロックを解除しません

// SleepLo​​ckTest.java的源码
パブリック クラスSleepLo​​ckTest { 

    プライベート 静的オブジェクトOBJ = 新しいオブジェクト(); 

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        スレッドAのT1 = 新しいスレッドA(「T1」)。
        スレッドAのT2 = 新しいスレッドA( "T2" )。
        t1.start(); 
        t2.start(); 
    } 

    静的 クラススレッドAが延びスレッド{
         公共スレッドA(文字列名){ 
             スーパー(名); 
        }
        公共 無効RUN(){ 
             // オブジェクトobjの同期がロックを取得
            同期(OBJ){
                 試みを{
                     のためにint型 I = 0;私は10 <;私は++ ){ 
                        System.out.printfを( "%のS:%D \ N-" 、この.getName()、I); 
                         // 私は4、スリープ100ミリ秒で割り切れることができる
                        IF(I%4 == 0 
                            のThread.sleep(); 
                    } 
                } キャッチ(InterruptedExceptionあるE){ 
                    e.printStackTrace( ); 
                } 
            } 
        } 
    } 
}
コードの表示

メインスレッド開始、二つの主要なスレッドT1およびT2。ラン()におけるT1及びT2は同じオブジェクトの同期ロック、即ち(OBJ)同期を参照します。それはのThread.sleep(100)を呼び出しますが、動作中のT1は、;しかし、t2は、CPUの実行権を取得するつもりはありません。そのため、t1は「objはゲンロックを開催し、」解放しません!
、我々はコメントしている場合、プログラムが再び実行される(OBJ)同期、T1、T2は互いに切り替えることができます

おすすめ

転載: www.cnblogs.com/myitnews/p/11422676.html