Maison >Java >javaDidacticiel >Interruption et arrêt du thread Java

Interruption et arrêt du thread Java

王林
王林avant
2019-11-26 14:53:402759parcourir

Interruption et arrêt du thread Java

méthode d'interruption

Lorsque nous appelons la méthode sleep ou la méthode join d'un thread, nous pouvons mettre certains threads en état d'attente et appeler le courant La méthode interruption() du thread peut interrompre l'état de blocage. La méthode d'interruption ne laissera pas le thread se terminer.

public void interrupt();// 中断线程的阻塞状态

Cette méthode lève une InterruptedException exception.

Recommandations vidéo d'apprentissage liées à Java : cours Java

Cas : démontre l'état d'attente de l'interruption du sommeil

Classe de thread :

 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();
                    }
                }
            }
        }
    }

Classe de test :

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();

    }

}

Résultat de sortie :

...
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
...

Grâce à la sortie de la console, nous pouvons voir que la méthode interrompue ne termine pas le thread en cours, mais change l'état de blocage du thread Interrompu , après avoir interrompu l'état de blocage, le thread pbteach-01 continue de s'exécuter.

méthode stop

Appelez la méthode stop du thread pour terminer l'exécution du thread.

public final void stop()  // 终止线程的执行

Classe de thread

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();
                    }
                }
            }
        }
    }

Classe de test :

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();
    
        }
    
    }

Résultat de sortie :

...
pbteach-01----9
pbteach-01----10

Il n'y a aucune sortie anormale dans la console , le programme se termine et le thread "pbteach-01" ne continue pas son exécution.

Articles et tutoriels connexes recommandés : Introduction à la programmation Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer