Javaのマルチスレッド:(中断)は、スレッドを中断し、スレッドがエレガントな原理を停止しています

MyThread.class

パッケージcn.yilong.edcsapiservice.thread。

パブリック クラスMyThreadは、Thread {拡張
    @Override 
    公共 ボイドラン(){ 
        システム。アウト .println(" 开始睡觉" );
        試す{ 
            のThread.sleep(10 )。
        } キャッチ(InterruptedExceptionある電子){ 
            e.printStackTrace(); 
        } 
        システム。アウト .println(" 结束睡觉" ); 

        同期(MyThread。クラス){
             int型私= 0 ; I < 100 ; 私は++ ){ 
                システム。うちの.print(I + " " ); 
            } 
            システム。アウト.println(); 
            文字列名 = にThread.currentThread()のgetName()。
            システム。アウト .println(名+ " " + この.isInterrupted()); 
            システム。アウト .println(" テスト-------------------- " ); 
            システム。アウト
        } .println();

    } 
}

 

Run.class

cn.yilong.edcsapiservice.threadパッケージ; 

パブリック クラスRUN2 { 

    公共の 静的な 無効メイン(文字列[] args)を{ 
        スレッドCT = にThread.currentThread(); 
        ct.setName(" mainThread " ); 

        試み{ 
            MyThread T = 新新MyThread( ); 
            t.setName(" myThread " ); 
            t.start(); 

            t.interrupt();   // スレッドTは、任意の治療せずに、終了し、その後、割り込み方式を転送した場合には

            同期(MyThread。クラス){
                文字列の名前 = にThread.currentThread()のgetName();. 
                。システムOUT .println(名+ " " + t.interruptedを()); //トンスレッドはいえ呼び出しますが、下は本当にトンを呼び出すのではなく、現在の実行し、メインメソッドスレッド実際の操作は、にThread.currentThread()isInterruptedを()すなわちmainThreadスレッドである。 
                システム。OUT .println(t.getName()+ " " + t.isInterrupted()) システムOUT .println(" 主----------------------------- " 
                。システムOUT .println(); 
            } 


        }キャッチ(例外e){ 
            システム。アウト .println(" メインキャッチ" ); 
            e.printStackTrace(); 
        } 
    } 
}

 

 




mainThread:偽
myThread:真
メイン-----------------------------

 
 

眠るようになった
java.lang.InterruptedExceptionを:SLEEPが中断
java.lang.Thread.sleep(ネイティブメソッド)AT
cn.yilong.edcsapiservice.thread.MyThread.run AT(MyThread.java:8)
睡眠を終了
0,1,2,3 、4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 、29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53 、54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78 、79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99、
myThread:偽
のテスト--- -----------------

 



()メソッドを中断

()メソッドを中断し、本質的にマークを作るために、スレッドへの呼び出しで、マークのデフォルトの初期値は次のとおりです。、コールの後になった:trueに
。だから、(このスレッドと捨て停止を停止し、マークしない)方法がありますこのこのスレッドへの即時停止は、基本的な違いである

割り込み()メソッドを呼び出すスレッドオブジェクト、我々はこのスレッドを中断したいと思い、人が論理割り込みを記述する必要が、   
通常は2例は、(実際には、ソースコードのコメントを説明する必要がある、他があります)があります。
1 :ステータススレッドで実行トンスレッド呼び出しが中断した場合()メソッド、そして、Tのスレッドはすぐに料理人を識別します。その場合には、:偽が真となり、普通の(もちろん、トンスレッド呼び出しが中断前の場合は()実行は、以上です
スレッドがまだ実行されている場合、タグは実行を継続し、まだ、まだ、とき偽)Tを変更することはありません、影響を受けませんマークされている(フォーカス)、その後、我々はスレッド実行方法tを実行します() (中断発呼)または
手動エンド・ラン()isInterruptedを()のメソッドを実行する。 長いったらしいの下で:
1。マーキング、実行後)t.interrupt():真の変化に偽、 run()メソッドt.interrupted ()およびt .isInterrupted()このフラグが偽、または真である取得する。2二つのことに)T.interrupted()メソッドの注意:
現在のスレッドの呼び出しを参照してください。1.、それは、ミアン()メソッドが実行t.interrupted()メソッドならば、実際の実装は、トンのスレッドではありませんメインスレッド(NB)
実行後2.t.interrupted()メソッドは、真または偽の結果を返す、そしてそれはまた、動作に更なるステップを実行する:結果標識Tスレッドリセット初期デフォルト値にはfalse。そう、二時間、それを呼び出すことはありません。(特別な注意)
(3)t.isInterrupted()メソッドは、トンスレッド割り込みフラグを参照:真、または偽、それは結果のみを返し、他の操作を行うことはありません。

2。スレッドの状態:障害物などの睡眠を呼び出すように、()、または待って()、またはjoin()メソッドをブロックし、この時点トンスレッドの呼び出しは()メソッドを中断した場合、その後、トンのスレッドはすぐに料理を識別します:偽の変更を同時に、真である
割り込みフラグを監視するために、この時間t自身のスレッドをブロックすることがtrueに設定され、その後、出くぼんだInterruptedExceptionある異常、スレッドトークンtの結果は、初期のデフォルト値にリセットされながら:偽(強調)
その後、ただし、例外をキャッチキャッチ-私たちは、try()でスレッド実行方法のトンで実行します 手動処理の実行()メソッドの終了後。

 

おすすめ

転載: www.cnblogs.com/smileblogs/p/11563554.html