从头认识java-17.2 线程中断(interrupt)
Posted cynchanpin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从头认识java-17.2 线程中断(interrupt)相关的知识,希望对你有一定的参考价值。
这一章节我们来讨论一下线程中断(interrupt)。
1.什么是线程中断(interrupt)?
就是在多线程执行的时候,我们给线程贴上一个中断的标记。可是不要求线程终止。
2.样例:
中断的样例:
package com.ray.ch17; public class Test2 { public static void main(String[] args) { PrintA printA = new PrintA(); Thread threadA = new Thread(printA); threadA.start(); } } class PrintA implements Runnable { private static int i = 0; @Override public void run() { while (!Thread.currentThread().isInterrupted()) { System.out.println("PrintA"); if (i == 2) { Thread.currentThread().interrupt(); } i++; } } }
输出:
PrintA
PrintA
PrintA
不中断的样例:
package com.ray.ch17; public class Test2 { public static void main(String[] args) { PrintB printB = new PrintB(); Thread threadB = new Thread(printB); threadB.start(); } } class PrintB implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("PrintB"); Thread.currentThread().interrupt(); } } }
输出:
PrintB
PrintB
PrintB
PrintB
PrintB
由上面的两个样例我们能够看出,interrupt仅仅是贴上一个中断的标记,不会强制中断。
3.interrupt与sleep的冲突
由于当使用sleep在interrupt之后使用,sleep将会去掉interrupt这个标记
冲突代码。以下的代码将会无限输出:
package com.ray.ch17; public class Test2 { public static void main(String[] args) { PrintA printA = new PrintA(); Thread threadA = new Thread(printA); threadA.start(); } } class PrintA implements Runnable { private static int i = 0; @Override public void run() { while (!Thread.currentThread().isInterrupted()) { System.out.println("PrintA"); if (i == 2) { Thread.currentThread().interrupt(); try { Thread.currentThread().sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } i++; } } }
总结:这一章节主要介绍线程中断(interrupt)。
这一章节就到这里,谢谢。
-----------------------------------
以上是关于从头认识java-17.2 线程中断(interrupt)的主要内容,如果未能解决你的问题,请参考以下文章
从头认识多线程-1.8 迫使线程停止的方法-暴力Stop方法
java基础知识回顾之java Thread类学习-- 线程中断