上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()方法完成对自身的暴力停止,请看下面的章节。