对于线程的终止或者中断,由于java中Thread.stop方法已经被弃用,如何终止一个线程,成为了一个挑战,不仅仅要考虑终止的条件也要考虑终止后的收尾工作。
大部分情况下,我们可以通过自己设置的标识例如m_stop布尔变量来,这样写run方法
public run ()
{
while(!m_stop)
{
//add your works here.
}
}
然后可以自己写一个Stop方法在里面将m_stop改变,就可以达到终止线程的目的。
但是如果在你的线程中,就是while循环中出现阻塞(大部分情况是wait,sleep或者IO阻塞等等),线程就停在里面,我们就无法通过判断m_stop的值来终止线程了。
这样我们可以通过另一种方式,调用interrupt()方法,这个方法是比较特别的,
通过测试,interrupt方法实现了这样的功能:
如果线程当前在sleep和wait状态下,会清除interrupt status, 并同时抛出异常.
而在非sleep和wait状态下,就会表明自己为interrupt status.
我们可以通过isInterrupted方法获得interrupt status。
也就是说如果线程处于阻塞状态,而且我们改变m_stop的值已经不起作用的时候,我们可以通过异常来终止线程。也就是在Stop方法里调用interrupt()方法,如果线程当前处于阻塞状态会产生一个异常。
例如:
public void run() {
while ( !m_stop) {
System.out.println( "Thread running..." );
try {
Thread.sleep( 1000 );
} catch ( InterruptedException e ) {
System.out.println( "Thread interrupted..." );
}
}
System.out.println( "Thread exiting under request..." );
}
这样可以通过catch子句跳出run方法,从而终止线程。
总结:
终止线程的方法
1、通过标识设置,跳出while循环
2、通过异常跳出run方法。
分享到:
相关推荐
Java线程:线程的调度-终止线程 25 Java线程:线程的调度-守护线程 28 Java线程:线程组 30 Java线程:线程的同步 33 一、 同步方法 35 二、 同步块 36 三、 volatile关键字 38 四、 使用synchronized关键字要注意...
主要介绍了Java终止线程实例和stop()方法源码阅读,具有一定借鉴价值,需要的朋友可以参考下
Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 ...9.8 挂起、恢复和终止线程 9.9 计时器线程Timer 9.10 线程联合 9.11 守护线程
java中 使用interrput 如何终止一个线程
JAVA中 终止线程的方法介绍,需要的朋友可以参考一下
主要为大家详细介绍了Java中终止线程的三种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本篇文章给大家分享了JAVA中实现终止线程池中正在运行的定时任务的具体步骤和方法,有需要的朋友跟着学习下。
当用户输入“stop clock”后,时钟终止显示。 (2)当用户在“命令”后的文本框中输入“fast”后,能够加速滚动字幕的显示;输入“slow”后,能够减慢字幕滚动;输入“stop”后,滚动字幕停止;输入“restart”后,...
主要为大家详细介绍了Java通过关闭Socket终止线程的相关代码
Java线程如何终止.pdf
主要介绍了Java中终止线程的方法详解的相关资料,需要的朋友可以参考下
主要介绍了JAVA 多线程--interrupt()和线程终止方式的的相关资料,文中代码非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
1.线程同步 2.线程间通信 3.线程挂起、恢复和终止 demo演示
NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286
在java语言中,使用多线程技术编程时,提出终止一个线程时不采用stop方法的三个原因,并举例加以证明,最后给出了新的解决方法。在java编程过程中,采用多线程技术可以更好地利用系统资源,减少对用户的响应时间,提高系统...
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的...
线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一个实例) 为什么要定义线程类 系统中进程包含多个线程,CPU通过分配时间片的...
主要介绍了Java如何使用interrupt()终止线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下