java interrupt理解
来源:互联网 发布:数控编程员招聘 编辑:程序博客网 时间:2024/05/21 10:56
理解
当一个线程被阻塞的时候(io, sleep等),我们取消这种阻塞,这个时候就可以使用interrupt
例子和讲解
我们先看个例子,代码入下:
package com.renzhan;class TestRunnable implements Runnable{ public void run(){ while(true) { System.out.println( "Thread is running..." ); System.out.println(Thread.currentThread().isInterrupted()); long time = System.currentTimeMillis();//取系统时间的毫秒数 while((System.currentTimeMillis()-time < 1000)) { //程序循环1秒钟,不同于sleep(1000)会阻塞进程。 } } }}public class App{ public static void main(String[] args){ Runnable r=new TestRunnable(); Thread th1=new Thread(r); th1.start(); th1.interrupt(); }}
代码的输出如下:
Thread is running...falseThread is running...trueThread is running...trueThread is running...trueThread is running...true
线程在调用interrupt 后,只是修改了他的状态,对线程的工作还是没有影响,这个是线程一直占据了cpu处于执行的状态。那么我们把线程的状态修改成sleep呢?
代码如下:
class TestRunnable implements Runnable{ public void run(){ try{ Thread.sleep(1000000); //这个线程将被阻塞1000秒 }catch(InterruptedException e){ e.printStackTrace(); //do more work and return. } }}
对应的输出如下:
java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at TestRunnable.run(App.java:6) at java.lang.Thread.run(Thread.java:745)
这个是因为线程当前处于阻塞状态,线程没有占用CPU,线程是不可能给自己的中断状态置位的。我们调用intrrupted 时候,这就会产生一个InterruptedException异常。正常我们就可以在异常处理中进行后续逻辑处理,我们也因此让进程变成了非阻塞状态。
0 0
- java interrupt理解
- java线程经典理解之Interrupt
- 理解java线程的中断(interrupt)
- 【转】理解java线程的中断(interrupt)
- 理解Java的Thread中的Interrupt机制
- 理解java线程的中断(interrupt)
- Java interrupt
- Java<优雅地理解线程interrupt、isInterrupted、interrupted>
- 理解interrupt()方法
- Thread.interrupt()方法理解
- 结合interrupt state来理解interrupt
- 理解Thread.interrupt()的含义
- JAVA线程的interrupt
- java的interrupt机制
- JAVA线程的interrupt
- JAVA线程的interrupt
- java 结束线程 interrupt()
- java中的interrupt
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
- error: Program received signal SIGSEGV, Segmentation fault. (Codeblocks, C++)
- 历届试题 打印十字图
- android基础知识---浅谈 MVP
- CF#398(Div.2) 解题报告
- java interrupt理解
- Hibernate的七种映射关系之基本映射
- learnR_datastructure_2
- Hibernate的七种映射关系之七种关联映射(二)
- 如何理解RESTful的幂等性
- Android-使用GET、POST、AsyncHttpClient向服务器提交数据
- 430的复位及复位电路
- poj1149(*网络流建模方法,paper题)
- 读书笔记 effective c++ Item 8 不要让异常(exceptions)离开析构函数