![Java多线程编程核心技术(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/745/42637745/b_42637745.jpg)
上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"); } }
![](https://epubservercos.yuewen.com/204B22/22139293909121606/epubprivate/OEBPS/Images/1-37.jpg?sign=1738872679-tpyzBjgExDnEyocUoyE3lohdIFOgKRBp-0-b00756da985312f4faaff64616842a9e)
图1-37 正常循环打印50万次
程序运行结果如图1-37所示。
把IDE控制台中的日志复制到文本编辑器软件中,显示的行数是500001行,如图1-38所示。
在331063行处输出了zzzzzzzz,说明sleep时间为2秒时,for语句跑了331063次循环,日志如下:
i=331062 i=331063 zzzzzzzz i=331064 i=331065
![](https://epubservercos.yuewen.com/204B22/22139293909121606/epubprivate/OEBPS/Images/1-38.jpg?sign=1738872679-5X5oYjo8luybEX3nmLYySAffvGvLmFub-0-0804af1229e771effa2383dca3cffe25)
图1-38 确认是500001行并且线程未停止
从运行结果来看,调用interrupt方法并没有将线程停止,那如何停止线程呢?