黑马程序员_InterruptedException的解读
来源:互联网 发布:晚上聊骚用什么软件 编辑:程序博客网 时间:2024/05/17 02:53
------- android培训、java培训、期待与您交流! ----------
最近写了些多线程的程序,用Thread.sleep()的时候有时会碰到InterruptedException。查了一些资料,下面是我自己的一些理解。
阻塞方法
一些多线程相关的方法是阻塞方法,比如Thread.sleep(), Thread.wait(), Thread.join()。
这些方法的执行通常需要比较长的时间来完成,当代码执行到阻塞方法时,一般要等待该方法返回后
才能继续往下执行,而InterruptedException提供了一种特殊的机制提前结束阻塞方法。
中断变量
每个线程都会维护一个bool变量,表示线程处于中断(true)或者非中断状态(false)。在线程初始的情况下中断变量为false。
这个变量的bool值可以通过Thread.isInterrupted()方法来读取,通过Thread.interrupted()方法来清除中断(即将中断变量置为false)。
线程中断
一个线程可以通过调用Thread.interrupt()方法来中断另外一个线程,具体过程如下:
1. 中断变量被设置为true。
2. 如果线程执行到了阻塞方法,那么该方法取消阻塞,并将中断变量重新置为false。
(这种机制是通过阻塞方法内部不断轮询中断变量的值来实现的)
例子:
class ThreadTest implements Runnable {public void run() {System.out.println("before sleep");try {Thread.sleep(5000);} catch (InterruptedException e) {System.out.println(Thread.currentThread().getName());Thread.currentThread().interrupt();System.out.println("after interrupt");} System.out.println("after sleep"); try {Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block //e.printStackTrace(); System.out.println(Thread.currentThread().getName()); Thread.currentThread().interrupt(); System.out.println("after interrupt"); }System.out.println("after sleep"); } }public class ThreadBasic { public static void main(String[] args) { Thread t = new Thread(new ThreadTest(), "thread-1");t.start(); t.interrupt();System.out.println(t.isInterrupted());}}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
- 黑马程序员_InterruptedException的解读
- 黑马程序员 初学IO的一些小知识解读
- 黑马程序员_面向对象基础解读
- 黑马程序员_SQL 数据库概念解读
- 黑马程序员_解读交通灯管理系统
- 黑马程序员_解读银行调度系统
- 黑马程序员_http请求响应参数解读
- 黑马程序员_对.net平台的认识及重要概念的解读
- 黑马程序员- Java实现的几个常用排序算法详细解读
- 黑马程序员_java当中关于I/O输入输出流的解读
- .黑马程序员_窗体应用程序WinForm基础解读
- 【黑马程序员】详细解读运行路径和字符串截取
- 解读程序员人生的四大象限
- 黑马程序员 一个程序员的自我修养
- 黑马程序员-注解的应用。
- <黑马程序员>菜单的创建
- 黑马程序员-java的注解
- 黑马程序员-java的配置文件
- eclipse工程里有小红叉
- 【不为人知的Word文档分节符设置】
- SVI实现不同vlan间通信
- 【全方面揭露超线程技术提升CPU性能的秘密】
- Android Application plugin
- 黑马程序员_InterruptedException的解读
- Spring MVC入门
- SQL Server 2008 R2中,变表的右键弹出菜单中的“选择前1000行”为“选择所有行”
- Jackson解析首字母大写的json字符串
- 泛型中super和extends的用法及区别
- Struts2的输入校验(1):编写校验规则文件(方法一)
- 在windows xp 下编译postgis-1.5.8驱动包的方法
- Win7 wifi热点设置
- 编程之美1.1让CPU占用率曲线听你指挥