线程中断
interrupt方法作用是告知线程停止手头的工作转而去做别的事。通过interrupt终止线程是很常见的,不过你完全可以设定线程如何响应中断。这也是本节的重点。
调用某一线程的interrupt方法可以中断该线程。但想要中断机制正常工作,首先要得到线程支持。
支持中断
线程如何支持中断?这取决于线程当前在执行的内容。如果线程频繁调用抛出中断异常(InterruptedException)的方法,它就会在捕获异常后从run方法返回。例如,假设一个线程run方法中有一个循环,想要支持中断机制,它可以这样改:
for (int i = 0; i < importantInfo.length; i++) { // 休眠4秒 try { Thread.sleep(4000); } catch (InterruptedException e) { // 线程被中断 return; } // 打印语句 System.out.println(importantInfo[i]); }
很多方法都会抛出中断异常(InterruptedException),比如sleep方法,如果收到中断信息,就会马上中断当前操作并返回。
如果线程运行了很长时间,而且没有调用任何抛出中断异常的方法,这时候又该怎样呢?那它必须定期调用Thread.interrupted方法来判断线程是否已被中断,如果是则返回true 。例如:
for (int i = 0; i < inputs.length; i++) { heavyCrunch(inputs[i]); if (Thread.interrupted()) { // 线程被已被终止 return; } }
在这个简单的例子中,代码只是单纯地测试是否被中断,如果是,就退出。在复杂的应用程序中,最好还是抛出一个InterruptedException :
if (Thread.interrupted()) { throw new InterruptedException(); }
这样写,就把处理线程中断的代码都集中在catch语句里头了。
线程中断状态标识
线程中断机制是靠一个叫中断状态(interrupt status)的内部标识来实现的。调用了Thread.interrupt来设置该标志。如果线程调用静态方法Thread.interrupted 检查中断,中断状态(interrupt status)便被清除。但使用其他线程的非静态isInterrupted方法来查询某线程的中断状态,是不会改变该线程的中断状态标识的(interrupt status flag)。
原文:
相关推荐
Open Firmware Recommended Practice: Interrupt Mapping Version 0.9
java 线程中的 interrupt,isInterrupt,interrupted 方法详解 在 Java 中,线程(Thread)类提供了三个相关的方法:interrupt、isInterrupted 和 interrupted,这三个方法都是用于处理线程的中断状态的。下面我们将...
java线程中断之interrupt和stop.docx
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...
一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
本文还介绍了用Java平台提供的协作中断机制来构造灵活的取消策略。各活动可以自行决定它们是可取消的还是不可取消的,以及如何对中断作出响应,如果立即返回会危害应用程序完整性的话,它们还可以推迟中断。
一个线程join另一个线程,(包括和interrupt互动的用法)3---马克-to-win java视频
通过将 MyRunnable 对象传递给 Thread 类的构造方法,我们创建了一个新的线程,并将 run 方法作为线程的执行逻辑。 除了基本的线程创建和启动,Java还提供了一些管理线程的方法和工具,例如: sleep 方法:使当前...
线程“张工”和线程“王工”分别负责“搬运苹果”(3箱)和“搬运香蕉”(3箱),他们每搬运一箱,就准备休息10秒钟(sleep方法),但是线程“老板”负责不让他们休息(interrupt方法)。 2. 编写一个包含主方法main...
线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以...
主要介绍了java多线程之停止线程的方法实例代码详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
wait方法则是属于Object类中的,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify方法后本线程才进入对象锁定池准备,获取对象锁进入运行状态。 五、volatile关键字的作用 volatile关键字...
4.1.5.3. Interrupt 方法结束线程使用interrupt()方法来中断线程有两种情况: ...通常很多人认为只要调用interrupt方法线程就会结束,实际上是错的, 一定要先捕获InterruptedException异常之后通过break来跳
主要介绍了Java线程Thread之interrupt中断解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
interrupt(),在一个线程中调用另一个线程的interrupt()方法,即会向那个线程发出信号——线程中断状态已被设置。至于那个线程何去何从,由具体的代码实现决定。 isInterrupted(),用来判断当前线程的中断状态...
主要介绍了JAVA 多线程--interrupt()和线程终止方式的的相关资料,文中代码非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的...
一个线程join另一个线程,(包括和interrupt互动的用法)2---马克-to-win java视频
Sparrow OS是笔者历时一年半写的小型嵌入式操作系统,现已完成,并分享文档。 本文是系列文档之(十),更多内容请访问 http://blog.csdn.net/michael2012zhao