Java 终止线程方法
2012-01-07 18:19
399 查看
我们一直以来都有一个错误的理解,认为interrupt会使线程停止运行,但事实上并非如此,调用一个线程的interrupt方法会把线程的状态改为中断态,但是interrupt方法只作用于那些因为执行了sleep、wait、join方法而休眠的线程,使他们不再休眠,同时会抛出 InterruptedException异常。比如一个线程A正在sleep中,这时候另外一个程序里去调用A的interrupt方法,这时就会迫使 A停止休眠而抛出InterruptedException异常;而如果线程A没有处于上面提到的三种休眠状态时被interrupt,这样就只是把线程
A的状态改为interruptted,但是不会影响线程A的继续执行。
如何停止一个线程呢?用stop方法吗?肯定不行,这个方法由于不安全已经过时,不推荐使用,下面的例子提供了一个常用的停止线程的方法,例子中在线程中引入一个属性来控制,当需要停止线程时,只需要调用shutDownThread()方法即可,因为在线程的run()方法中会循环检测这个属性的值,为true正常运行,为false时不会进入循环,线程就可以结束.
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中 终止线程的方法介绍
- java终止线程的三种方法
- java多线程中终止线程的方法的对别
- JAVA的interrupt()方法和线程终止的方式
- Java中终止线程的方法详解
- JAVA多线程学习笔记<3>线程传入参数与终止线程方法
- 【java】终止线程的三种方法
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- JAVA中终止线程的方法
- Java中安全终止线程的方法
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- Java终止线程实例和stop()方法源码阅读
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- java线程interrupt()方法和线程终止方式
- Java并发编程之三:线程挂起、恢复与终止的正确方法
- Java终止当前线程的方法
- java 多线程总结(一) 创建线程的几种方法及对终止线程运行的讨论
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- Java线程之interrupt终止线程,Thread中的主要方法(五)