1_基礎知識_chapter05_インフラストラクチャモジュール_4_ブロックメソッドと割り込みメソッド

1183 ワード

  • とThread.sleep同様、BlockingQueueのputとtakeメソッドはコンパイラ異常InterruptedExceptionを放出します.1つの方法がInterruptedExceptionを放出する場合、この方法はブロック方法
  • であることを示す.
  • Threadはinterrupt()、interrupted()、isInterrupted()メソッド(まだ見ていない)
  • を提供しています.
  • 各スレッドにはboolタイプのフラグビットがあり、interruptを呼び出すとスレッドのこのフラグビット
  • が設定.
  • 割り込みは、1つのスレッドに対してt 1を呼び出すコラボレーションメカニズムである.interrupt()はt 1を停止させず、t 1に
  • を処理すべきだと伝えるだけである.
  • InterruptedExceptionの処理方法(1)異常を直接伝達異常を捕獲せずに直接放出または捕獲異常を単純にクリーンアップして再放出する(2)回復中断コードがRunnableの一部である場合はInterruptedExceptionのみを捕獲し、現在のスレッドを呼び出すinterrupt()メソッドにより中断状態を回復する(そうでないと中断状態が消える)、これにより、より上位レベルのコードは、割り込み例
      public class TaskRunnable implements Runnable {
    
          BlockingQueue queue;
    
          public void run() {
      
              try {
                  processTask(queue.take());
              } catch (InterruptedException e) {
          
                  // restore interrupted status
                  Thread.currentThread().interrupt();
              }
          }
    
          void processTask(Task task) {
              // Handle the task
          }
    
          interface Task {
          }
      }
    
    が発生していることを示します.InterruptedException異常だけをキャプチャして処理しないでください.このようにスレッドが中断された証拠は、より上位レベルのコードが失われている
  • を処理することができない.