研究ノート(33):第1章並行プログラミングの分散基盤-マルチスレッドの重要性と使用法の理解(パート2)

今すぐ学ぶ:https//edu.csdn.net/course/play/29000/424234?utm_source = blogtoedu

1.スレッドのライフサイクル

スレッドの起動はすぐには実行されません

 

6種類のJavaスレッド:NEW、実行状態(CPUスケジューリングに応じて準備状態+実行状態を変更可能)、ブロッキング状態(WAITING + TIMED_WAITING + BLOCKED)、終了状態

オペレーティングシステムレベル5のタイプ:実行状態(準備完了状態+実行状態はCPUスケジューリングに従って変更可能)、ブロック状態(WAITING + TIMED_WAITING + BLOCKED)、終了状態

ブロッキング:WAITING、TIMED_WAITING、BLOCKED、IOブロッキング

待機を引き起こす方法は?:Sleep; wait(); join; LockSupport.park

如何導ったTIMED_WAITING?:sleep(long); wait(long); join(long); LockSupport.park(long)

BLOCKEDの原因は?:同期

スレッドが開始された直後に実行されていないのに、準備ができているのはなぜですか?

なぜなら、スレッドが開始された後、CPUを割り当てるためにオペレーティングシステムのスケジューリングアルゴリズムが必要になるためです。このステージは準備完了状態です。割り当てが完了すると、実行ステージに入ります。

2.スレッドの開始

new Thread()。start()スレッドの開始= "ネイティブのstart0C言語メソッドを呼び出すことにより、JVMレベルでスレッドを開始するメソッドを呼び出します。知識のスレッドがオペレーティングシステムによって提供されることを知る必要があります。

new Thread()。run()はインスタンスメソッドを呼び出します

3.スレッドの終了

3.1。スレッドはどのような状況で終了しますか?

  (1)run()メソッドの実行が終了します

(2)Interrupt()は強制割り込みのメソッドではありません。run()メソッドが正常に終了できない場合にのみinterrupt()を使用するか、sleep(long)でスレッドを中断してください。

while(!Thread.currentThread()。isInterrupted()){

}

1 "interrupt()メソッドを使用できるかどうかを判断するための必要条件もあります。つまり、コードでInterruptedExceptionがスローされるかどうかを確認します。catchの例外処理で例外がスローされない場合(InterruptedException e) 、そうではありませんスレッドが中断されると、スレッドのリセットがトリガーされ、interruptedがfalseになります。キャッチされた例外がスローされてエラーが報告されると、スレッドは中断されます。

 

2 "同様の例を挙げてください。

試してください{

} catch(InterruptedException e){

e.printStackTrace(); //処理なし、中断なし

新しいRuntimeException(); //を強制終了します。作業する時間です。

Thread.currentThread()。interrupt(); //再び中断する; //寝ないでください。次に機能するかどうかわかりません

}

昼休み中、睡眠中(whileループ)、目覚まし時計が鳴ります(interrupter()メソッド)。目覚まし時計をオフにして何もしない(例外を処理しない)場合は、目覚まし時計を鳴らし続けます。起きてすぐに仕事をし(例外を投げて、仕事の時間だと言ってください)、スリープが中断されます。または、アラームが鳴った後、アラームモードをリセットして呼び出し音を鳴らし続けます(つまり、Thread.currentThread()を中断し続けます。キャッチのinterrupt())、それからあなたは眠ることができないに違いありません、起きたままになります、しかしあなたが働き始めるかどうかは関係ありません

3「リセットとは何ですか?リセットする方法は?なぜリセットするのですか?

リセットはスレッドを初期化された状態に変えることであり、割り込みはfalseになります。

thread.interrupt();をリセットするメソッド。

リセットの理由:中断が不合理である可能性があります。不合理な状況でリセットせずに中断された場合、スレッドは続行できません。したがって、中断後にリセットします。したがって、中断の例外がスローされない場合(InterruptedException)または再度中断すると、コードwhile()は続行できるため、リセットの最終的な目的は偶発的な強制終了を防ぐことです。

4「割り込み()の役割?

(1)共有変数の値をtrueに設定します

  (2)ブロックされた状態でスレッドをウェイクアップします

おすすめ

転載: blog.csdn.net/qq_28500837/article/details/112859744