9.0、Java多线程——线程停止
先来看一张简单的线程状态:
再来看一张详细的线程状态图:

总结一下 :
1、当我们线程对象被创建的时候线程就已经来到了 新生状态
2、当我们调用 start() 方法的时候 线程就会进入 就绪状态 以便等待CPU的调度
3、当线程被CPU调度执行的时候将进入 运行状态
4、当运行状态的线程遇到 sleep 、 wait 或者 同步锁 的时候进入 阻塞状态,然后等待阻塞时间解除后重新进入就绪状态等待CPU的调度
5、线程执行结束后就会进入 死亡状态 就不会再启动了
停止线程:
不推荐使用JDK提供的stop()、destory()方法。【已废弃使用】
推荐线程自己停下来
建议使用一个表示为进行终止变量,当flag=false,则终止线程运行
接下来用代码来实现一下利用 flag标志位 停止 子线程:
package com.hkl.state;
//测试stop
//1.建议线程正常停止--->利用次数,不建议死循环
//2.建议视同标志位--->设置一个标志位
//3.不要使用stop或者destroy等过时或者JDK不建议使用的方法
public class TestStop implements Runnable{
//1.设置一个标识位
private Boolean flag = true;
@Override
public void run() {
int i =0;
while(flag) {
System.out.println("run...执行->"+i++);
}
}
//2.设置一个公开的方法停止线程,转换标志位
public void stop() {
this.flag = false;
}
public static void main(String[] args) {
TestStop testStop = new TestStop();
new Thread(testStop).start();
for(int i=0;i<=1000;i++) {
System.out.println("main主线程调用执行"+i);
if(i==900) {
//调用stop方法切换标志位,让线程停止
testStop.stop();
System.out.println("子线程已停止");
}
}
}
}
可以看到运行结果如下:
主线程和子线程在同时进行,当主线程到900的时候,使用 flag标志位停止了子线程的执行

本文介绍了Java线程的生命周期,并探讨了如何安全地停止线程。不推荐使用已废弃的stop()和destroy()方法,而是推荐通过设置标志位来控制线程的停止。示例代码展示了一个利用布尔标志变量停止子线程的实例,当主线程改变标志位时,子线程会优雅地结束执行。
1329

被折叠的 条评论
为什么被折叠?



