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!