Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

1.11.6 使用stop()暴力停止线程

使用stop()方法可以强行停止线程,即暴力停止线程。

新建项目useStopMethodThreadTest,文件MyThread.java代码如下:


package testpackage;

public class MyThread extends Thread {
private int i = 0;

@Override
public void run() {
    try {
        while (true) {
            i++;
            System.out.println("i=" + i);
            Thread.sleep(1000);
        }
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

文件Run.java代码如下:


package test.run;

import testpackage.MyThread;

public class Run {

public static void main(String[] args) {
    try {
        MyThread thread = new MyThread();
        thread.start();
        Thread.sleep(8000);
        thread.stop();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

程序运行结果如图1-50所示。

图1-50 线程被暴力停止后运行图标呈灰色

由运行结果可以看出,线程被暴力停止了,这种方式就是1.11节介绍的第二种停止线程的方法——使用stop方法强行终止线程。

stop()方法呈删除线程状态,是作废过期的方法,原因就是stop()方法容易造成业务处理的不确定性。例如,A线程执行如下业务:


增加数据1
增加数据2
增加数据3
增加数据4
增加数据5
增加数据6
增加数据7

这时在任意时机对A线程调用stop()方法,A线程均不能确定在哪里被停止了,导致数据增加得不完整。被stop()暴力停止的线程连一个类似执行finally{}语句的机会都没有,就彻底被杀死。

在本节中,线程是否被暴力停止由外界(main方法)决定,线程也可以根据判断条件自己调用stop()方法完成对自身的暴力停止,请看下面的章节。