java 多线程 中断线程interrupt 研究
来源:互联网 发布:手机字体增大软件 编辑:程序博客网 时间:2024/05/16 19:15
今天研究多线程中的 中断线程 的概念 在java多线程中 stop()方法已经被废弃,留下了其余三个方法原型:
public void interrupt(); public boolean isInterrupted(); public static boolean interrupted();
字面是中断的意思 但是这并不是直接中断某线程 而是设定一个中断状态 我们取到这个状态 该怎么处理是我们自己决定
public void interrupt();
当这个线程被阻塞在wait,join,sleep等方法的时候,调用 interrupt(非静态方法)会引起这个线程的interrupt状态被清空(设为false),并且前者三个方法会抛出InterruptedException。除此之外(这个线程不处于wait,join,sleep方法),这个线程的interrupt状态会被设置(设为true)。public static boolean interrupted();
调用interrupt(静态方法)会返回当前线程的interrupt状态(true 或false),并把当前线程的interrupt状态清空(设为false)。
注意:这个是个静态方法,并且返回的是当前线程状态,并不一定是调用者的线程状态。public boolean isInterrupted();
判断此线程是true还是false,不影响中断状态再补充一个原理:wait,join,sleep方法执行后,会不断的轮询监听 interrupted
标志位,发现其设置为true后,会停止阻塞并抛出 InterruptedException异常。
然后我们看一个例子:
/** * * 根据上面三个方法的原理对下面的结果对号入座 * * @author panqian * @date 2016年12月21日 下午7:05:28 */package Thread;public class InterruptRunnable_2 implements Runnable { @Override public void run() { while (true) { System.out.println("我在外面。。。。"); try { Thread.currentThread().sleep(2000); } catch (InterruptedException e) { System.out.println("捕捉到InterruptedException"); //非静态方法interrupt碰到线程阻塞 sleep()抛异常 清空中断状态 中断状态设为false if (Thread.currentThread().isInterrupted()) { System.out.println("我走了。。。。"); } //非静态方法interrupt未碰到线程阻塞 中断状态设为true Thread.currentThread().interrupt(); if (Thread.currentThread().isInterrupted()) { System.out.println("我还是走了。。。。"); } //静态方法interrupt清空中断状态 中断状态设为false Thread.interrupted(); if (Thread.currentThread().isInterrupted()) { System.out.println("我真的走了。。。。"); } } } }}
package Thread.test;import Thread.InterruptRunnable_2;/** * 试验中断线程 * * @author panqian * @date 2016年12月21日 下午7:05:28 */public class InterruptThread_2 { public static void main(String[] args) { InterruptRunnable_2 interruptRunnable_2 = new InterruptRunnable_2(); final Thread thread = new Thread(interruptRunnable_2); thread.start(); thread.interrupt(); }}
执行结果
我在外面。。。。捕捉到InterruptedException我还是走了。。。。 (只执行了这个输出指令 原因看代码注释)我在外面。。。。我在外面。。。。我在外面。。。。无限循环
最后感谢 网上的一些资料 在此只是做个总结
0 0
- java 多线程 中断线程interrupt 研究
- Java多线程 -- 中断线程(Interrupt)
- Java多线程/并发08、中断线程 interrupt()
- Java 多线程--interrupt()中断
- JAVA 线程中断interrupt()
- Java线程中断interrupt
- Java多线程之中断线程(Interrupt)的使用详解
- Java多线程(二)——线程中断interrupt
- java 多线程基础之二:线程的中断(interrupt)
- java线程中断[interrupt()函数]
- 用interrupt()中断Java线程
- 用interrupt()中断Java线程
- 用interrupt()中断Java线程
- 用interrupt()中断Java线程
- 用interrupt()中断Java线程
- java线程中断 interrupt详解
- java线程中断[interrupt()函数]
- 用interrupt()中断Java线程
- Hello Quartz
- UVA11059 Maximum Product
- 1613-3-傅溥衍 总结《2016年12月21日》【连续第八十二天总结】
- 欧拉计划 32
- python转发端
- java 多线程 中断线程interrupt 研究
- 【codeforces 548A】Mike and Fax
- Cordova 搭建和项目创建
- nodejs 开发调试
- 欧拉计划 33
- JSON字符串和JSON对象的转换方式
- Java数据库连接池学习
- Struts2的ognl与JSP的el表达式取值问题
- Unity NGUI 未知Error