ホームページ >Java >&#&チュートリアル >Java スレッドの中断とブロッキングの違いは何ですか? Java スレッドの中断とブロックの比較

Java スレッドの中断とブロッキングの違いは何ですか? Java スレッドの中断とブロックの比較

不言
不言オリジナル
2018-09-15 16:51:062673ブラウズ

この記事でわかることは、Java スレッドの中断とブロッキングの違いは何でしょうか? Java スレッドの中断とブロックの比較は、参考になると思います。

多くの Java 開発者 (私を含む)、特にソフトウェア業界に入ったばかりの初心者は、Java でスレッドの中断を設定すると、スレッドが停止し、前方に実行されなくなると考えています。

Thread.currentThread().interrupt()

実際にはそうではありません。スレッドの中断は単なる状態です。true は中断されたことを意味し、false は中断されていないことを意味します。

//スレッド割り込みステータスを取得します。割り込みが発生した場合は true を返し、そうでない場合は false を返します。

Thread.currentThread().isInterrupted()
スレッド割り込みの設定は、スレッドの実行の継続には影響しませんが、スレッドが割り込みを設定した後、wait、jion、および sleep メソッドがスレッド内で呼び出され、すぐに InterruptedException をスローし、割り込みフラグがクリアされて false にリセットされます。

クラス Thread2 は Runnable を実装します{

    @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

park(Object blocker) は指定されたスレッドをブロックすることを意味します。パラメータ ブロッカーは現在のスレッド オブジェクトです。 2 unpark(Thread thread) が起動します。指定されたスレッド、パラメータ thread はスレッドを指定します オブジェクト

例:

 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。