Java スレッドの割り込み 割り込みと停止

王林
リリース: 2019-11-26 14:53:40
転載
2686 人が閲覧しました

Java スレッドの割り込み 割り込みと停止

割り込みメソッド

スレッドのスリープ メソッドまたはジョイン メソッドを呼び出すと、いくつかのスレッドを待機状態にして、現在のスレッドを呼び出すことができます。スレッドのinterrupt()メソッドは、ブロッキング状態を中断できます。割り込みメソッドではスレッドを終了させません。

public void interrupt();// 中断线程的阻塞状态
ログイン後にコピー

このメソッドは InterruptedException 例外をスローします。

おすすめの Java 関連学習ビデオ: java コース

ケース: 割り込みスリープの待機状態を示します

スレッド クラス:

 package com.pbteach.thread;
 public class MyThread extends Thread {
    
        @Override
        public void run() {
    
            for(int x = 0 ; x < 100 ; x++) {
                System.out.println(Thread.currentThread().getName() + "----" + x );
                if(x == 10) {
                    try {
                        TimeUnit.SECONDS.sleep(10);     // 线程休眠以后,该线程就处于阻塞状态
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
ログイン後にコピー

テストクラス:

package com.pbteach.thread;
public class ThreadDemo {

    public static void main(String[] args) {

        // 创建MyThread线程对象
        MyThread t1 = new MyThread();
        t1.setName("pbteach-01");

        // 启动线程
        t1.start();

        try {
            // 主线程休眠2秒
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 中断t1线程的休眠
        t1.interrupt();

    }

}
ログイン後にコピー

出力結果:

...
pbteach-01----10
java.lang.InterruptedException: sleep interrupted
	at java.base/java.lang.Thread.sleep(Native Method)
	at java.base/java.lang.Thread.sleep(Thread.java:339)
	at java.base/java.util.concurrent.TimeUnit.sleep(TimeUnit.java:446)
	at com.pbteach.javase.thread.api.demo14.MyThread.run(MyThread.java:14)
pbteach-01----11
...
ログイン後にコピー

コンソールの出力結果から、中断されたメソッドが現在のスレッドを終了させるのではなく、ブロックを変更することがわかります。スレッドの状態 中断。ブロック状態を中断した後、スレッド pbteach-01 は実行を継続します。

stop メソッド

スレッドの stop メソッドを呼び出して、スレッドの実行を終了します。

public final void stop()  // 终止线程的执行
ログイン後にコピー

スレッドクラス

package com.pbteach.thread;
    public class MyThread extends Thread {
    
        @Override
        public void run() {
    
            for(int x = 0 ; x < 100 ; x++) {
                System.out.println(Thread.currentThread().getName() + "----" + x );
                if(x == 10) {
                    try {
                        TimeUnit.SECONDS.sleep(10);     // 线程休眠以后,该线程就处于阻塞状态
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
ログイン後にコピー

テストクラス:

package com.pbteach.thread;
    public class ThreadDemo1 {
    
        public static void main(String[] args) {
    
            // 创建MyThread线程对象
            MyThread t1 = new MyThread();
            t1.setName("pbteach-01");
    
            // 启动线程
            t1.start();
    
            try {
                // 主线程休眠2秒
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            // 终止线程t1的执行
            t1.stop();
    
        }
    
    }
ログイン後にコピー

出力結果:

...
pbteach-01----9
pbteach-01----10
ログイン後にコピー

コンソールには異常な出力はありません、プログラムは終了し、「pbteach-01」スレッドは実行を継続しません。

おすすめの関連記事チュートリアル: Java プログラミング入門

以上がJava スレッドの割り込み 割り込みと停止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート