我们一直以来都有一个错误的理解,认为interrupt会使线程停止运行,但事实上并非如此,调用一个线程的interrupt方法会把线程的状态改为中断态,但是interrupt方法只作用于那些因为执行了sleep、wait、join方法而休眠的线程,使他们不再休眠,同时会抛出InterruptedException异常。比如一个线程A正在sleep中,这时候另外一个程序里去调用A的interrupt方法,这时就会迫使A停止休眠而抛出InterruptedException异常;而如果线程A没有处于上面提到的三种休眠状态时被interrupt,这样就只是把线程A的状态改为interruptted,但是不会影响线程A的继续执行。
如何停止一个线程呢?用stop方法吗?肯定不行,这个方法由于不安全已经过时,不推荐使用,下面的例子提供了一个常用的停止线程的方法,例子中在线程中引入一个属性来控制,当需要停止线程时,只需要调用shutDownThread()方法即可,因为在线程的run()方法中会循环检测这个属性的值,为true正常运行,为false时不会进入循环,线程就可以结束.
public class TestStopThread
{
public static void main(String args[]) {
Runner r = new Runner() ;
Thread t = new Thread(r) ;
t.start() ;
for(int i=0 ;i<100 ;i++ ) {
if(i%10 == 0 )
System.out.println("Thread: i=" i) ;
}
System.out.println("Thread over ...") ;
r.shutDownThread() ;
}
}
class Runner implements Runnable
{
private boolean flag = true ;
public void run() {
int i = 0 ;
while(flag) {
System.out.println(i " ") ;
}
}
public synchronized void shutDownThread() {
flag = false ;
}
public synchronized boolean isShutDown() {
return flag;
}
}
分享到:
相关推荐
Java线程:线程的调度-终止线程 25 Java线程:线程的调度-守护线程 28 Java线程:线程组 30 Java线程:线程的同步 33 一、 同步方法 35 二、 同步块 36 三、 volatile关键字 38 四、 使用synchronized关键字要注意...
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中 终止线程的方法介绍,需要的朋友可以参考一下
java中 使用interrput 如何终止一个线程
主要介绍了Java终止线程实例和stop()方法源码阅读,具有一定借鉴价值,需要的朋友可以参考下
主要为大家详细介绍了Java中终止线程的三种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了Java中终止线程的方法详解的相关资料,需要的朋友可以参考下
本篇文章给大家分享了JAVA中实现终止线程池中正在运行的定时任务的具体步骤和方法,有需要的朋友跟着学习下。
在java语言中,使用多线程技术编程时,提出终止一个线程时不采用stop方法的三个原因,并举例加以证明,最后给出了新的解决方法。在java编程过程中,采用多线程技术可以更好地利用系统资源,减少对用户的响应时间,提高系统...
在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的...
Java线程如何终止.pdf
当用户输入“stop clock”后,时钟终止显示。 (2)当用户在“命令”后的文本框中输入“fast”后,能够加速滚动字幕的显示;输入“slow”后,能够减慢字幕滚动;输入“stop”后,滚动字幕停止;输入“restart”后,...
主要为大家详细介绍了Java通过关闭Socket终止线程的相关代码
1.线程同步 2.线程间通信 3.线程挂起、恢复和终止 demo演示
NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286
主要介绍了JAVA 多线程--interrupt()和线程终止方式的的相关资料,文中代码非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,...此线程随即终止。
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一个实例) 为什么要定义线程类 系统中进程包含多个线程,CPU通过分配时间片的...