`
panxq0809
  • 浏览: 294968 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 终止线程方法

    博客分类:
  • java
阅读更多
我们一直以来都有一个错误的理解,认为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;
    }
}
分享到:
评论
2 楼 zhanghh321 2011-07-06  
这个方法不好用的。如果线程处于阻塞状态,这个flag变量就不起作用了
1 楼 woshilitao5 2011-03-02  
能用吗?进程是真正意义的终止吗?我不懂,所以不参考你的方法!

相关推荐

Global site tag (gtag.js) - Google Analytics