上QQ阅读APP看书,第一时间看更新
1.11.1 停止不了的线程
本示例将调用interrupt()方法来停止线程,但interrupt()方法的使用效果并不像for+break语句那样,可以马上停止循环,该方法仅仅是在当前线程中打了一个停止的标记,并不是真正的停止线程。
创建名称为t11的项目,文件MyThread.java代码如下:
public class MyThread extends Thread { @Override public void run() { super.run(); for (int i = 0; i < 500000; i++) { System.out.println("i=" + (i + 1)); } } }
运行类Run.java代码如下:
package test; import exthread.MyThread; public class Run { public static void main(String[] args) throws InterruptedException { MyThread thread = new MyThread(); thread.start(); Thread.sleep(2000); thread.interrupt(); System.out.println("zzzzzzzz"); } }
图1-37 正常循环打印50万次
程序运行结果如图1-37所示。
把IDE控制台中的日志复制到文本编辑器软件中,显示的行数是500001行,如图1-38所示。
在331063行处输出了zzzzzzzz,说明sleep时间为2秒时,for语句跑了331063次循环,日志如下:
i=331062 i=331063 zzzzzzzz i=331064 i=331065
图1-38 确认是500001行并且线程未停止
从运行结果来看,调用interrupt方法并没有将线程停止,那如何停止线程呢?