Thread.stop
, Thread.suspend
, Thread.resume
和Runtime.runFinalizersOnExit
这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!
现在,如果你要安全有效地终止一个线程,应该采用以下这些方法:
1,线程正常执行完毕,正常结束。
也就是让run方法执行完毕,该线程就会正常结束。
2,监视某些条件,结束线程的不间断运行。
然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。
通常,它们执行在一个while(true)的死循环中。
如:
@Override
public
void
run() {
while
(
true
){
someWork();
if
(
finished
){
break
;
}
try
{
Thread.sleep
(10000);
}
catch
(InterruptedException e) {
/*
TODO
自动生成
catch
块
*
*/
e.printStackTrace();
}
}
}
我们可以在while死循环内,每次循环时,察看外部条件,看看是否需要关闭当前线程。如果是,就break,跳出死循环,或者是抛出异常,跳出死循环,结束线程。
有些执行伺服任务的线程,在while(true)这样的死循环内部,是一个阻塞中的方法。此时,就不能采用第二种方法了。因为,当该方法没有返回时,该线程一直处于阻塞当中,根本无法执行其他语句。
如:
@Override
public
void
run() {
while
(
true
){
try
{
// getSendMessages
是
BlockingQueue
类。它的
take
方法将会阻塞!
responseMessage =
this
.getSendMessages().take();
}
catch
(InterruptedException e1) {
throw
new
RuntimeException();
//
或者
break;
}
someWork();
}
一个外部的Thread 对象 指向这个线程。 需要结束这个线程时,只需要调用thread对象的interrupt
() 方法,就会在
responseMessage =
this
.getSendMessages().take();
这条语句中产生一个InterruptedException
异常,从而结束该线程的阻塞状态,通过抛出异常,或者
break
跳出死循环,结束这个线程。
分享到:
相关推荐
java中断线程的正确姿势完整示例.rar
线程中断 静态方法(有关同步的细节) 总结 第五章 Java线程编程的例子 数据结构和容器 简单的同步例子 一个网络服务器类 AsyncInputStream类 使用TCPServer和AsynclnputStream 总结 第六章 Java线程调度 线程...
主要介绍了Java中断线程的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
该方法“中断线程”,但仅仅是会设置该线程的中断状态位为true,至于中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。 线程会不时地检测这个中断标示位,以判断线程...
Java 实例 - 中断线程源代码+详细指导教程.zip
之前在使用Java实现熔断降级组件的时候,需要实现接口请求的超时中断,通过查找相关资料了解了相关的方法,下面这篇文章主要给大家介绍了关于Java中实现线程的超时中断的相关资料,需要的朋友可以参考下
3.1 Java线程 3.2 创建线程 3.3 使用线程的缺点 3.3.1 初始启动变慢 3.3.2 资源利用 3.3.2 资源利用 3.4 线程管理 3.5 共享资源的使用同步 3.5.1 同步方法和同步代码块的嵌套调用...
Java基本功之中断线程的理解[参考].pdf
java线程中断之interrupt和stop.docx
主要介绍了Java中断一个线程操作,结合实例形式分析了java中断线程相关的interrupt()、isInterrupted()及interrupted()函数使用技巧,需要的朋友可以参考下
在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的...
java的线程机制是抢占式的,这表示调试 机制会周期性的中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都分分配到数据合理的时间去驱动 它的任务。在多线程中,一般对于static用的...
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程和线程安全,以及如何基于Http协议实现断点续传功能。该项目提供了一个完整的源代码包,可以作为学习...
interrupt字面上是中断的意思,但在Java里Thread.interrupt()方法实际上通过某种方式通知线程,并不会直接中止该线程
Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己,本文将详细介绍,需要了解的朋友可以参考下
主要介绍了Java多线程中断机制三种方法及示例,向大家分享了这三种方法的介绍几代码示例,具有一定参考价值,需要的朋友可以了解下。
Java线程中断示例程序的代码清单.pdf 学习资料 复习资料 教学资源
该Java程序使用Eclipse编写,完成了定时收发UDP的功能。其中体现了线程使用、Jni接口调用、精确定时、模拟鼠标串口等功能。