この記事でわかることは、Java スレッドの中断とブロッキングの違いは何でしょうか? Java スレッドの中断とブロックの比較は、参考になると思います。
多くの Java 開発者 (私を含む)、特にソフトウェア業界に入ったばかりの初心者は、Java でスレッドの中断を設定すると、スレッドが停止し、前方に実行されなくなると考えています。
Thread.currentThread().interrupt()
実際にはそうではありません。スレッドの中断は単なる状態です。true は中断されたことを意味し、false は中断されていないことを意味します。
//スレッド割り込みステータスを取得します。割り込みが発生した場合は true を返し、そうでない場合は false を返します。Thread.currentThread().isInterrupted()
スレッド割り込みの設定は、スレッドの実行の継続には影響しませんが、スレッドが割り込みを設定した後、wait、jion、および sleep メソッドがスレッド内で呼び出され、すぐに InterruptedException をスローし、割り込みフラグがクリアされて false にリセットされます。
@Override public void run() { try { System.out.println(); System.out.println(hread.currentThread().isInterrupted());//输出false Thread.currentThread().interrupt();//当前线程中断 System.out.println("Thread.currentThread().isInterrupted());//输出true Thread.sleep(3000);//中断后执行sleep会抛出异常 } catch (InterruptedException e) { e.printStackTrace(); System.out.println("Thread.currentThread().isInterrupted());//输出false } } }
スレッドを実際に停止 (ブロック) するために、Java は比較的低レベルの同時実行ツール クラス: LockSupport、このクラスには 2 つの一般的に使用されるメソッドがあります。 1
例:
public void test_LockSupport(){ Thread thread=new Thread(new Thread_park()); thread.start();//阻塞当前线程 Thread thread2=new Thread(new Thread_unpark(thread)); thread2.start();//唤醒被阻塞的线程 } class Thread_park implements Runnable{ @Override public void run() { System.out.println("Thread_park开始"); LockSupport.park(this);//阻塞当前线程 System.out.println("Thread_park结束"); } } class Thread_unpark implements Runnable{ private Thread thread; public Thread_unpark(Thread thread) { this.thread = thread; } @Override public void run() { System.out.println("Thread_unpark开始"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } LockSupport.unpark(thread);//唤醒被阻塞的线程 System.out.println("Thread_unpark结束"); } }
Java マルチスレッド プログラミングにおける LockSupport クラスの使用をブロックするスレッドの詳細な説明
Java でのマルチスレッドのブロックとウェイクアップのサンプル コード
以上がJava スレッドの中断とブロッキングの違いは何ですか? Java スレッドの中断とブロックの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。