如何更好的结束线程
在java中,每段线程都是运行了不同的任务,可能有的线程刚执行了任务,有的线程任务已经执行了一半了,后者有的任务执行快要结束了,所以线程的关闭需要考虑到各种情况,不是简单的使用stop()、destory()等方法
最优方案是让其运行完(也就是方法执行完毕),干净地释放掉所有资源,然后退出。如果是一个不断循环运行的线程,就需要用到线程间的通信机制,让主线程通知其退出
这里有个概念,daemon线程和非daemon线程
daemom线程的生命周期依附于主线程,当主线程执行完毕,daemom无论业务逻辑是否执行完毕,都会马上终止,通过使用Thread.setDaemon(true)将线程设置为守护线程
package com.java.test.daemom;
import lombok.extern.slf4j.Slf4j;
/**
* @Description:
* @Author: Yourheart
* @Create: 2022/10/30 21:29
*/
@Slf4j
public class DaeMomThreadDemo extends Thread {
@Override
public void run() {
while (true){
String name = Thread.currentThread().getName();
log.info("【守护线程】name:{}",name);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.java.test.daemom;
import lombok.extern.slf4j.Slf4j;
/**
* @Description:
* @Author: Yourheart
* @Create: 2022/10/30 21:32
*/
@Slf4j
public class ThreadDemo extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
log.info("非Daemon线程");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.java.test.daemom;
/**
* @Description:
* @Author: Yourheart
* @Create: 2022/10/30 21:28
*/
public class ThreadTest {
public static void main(String[] args) {
DaeMomThreadDemo daeMomThreadDemo=new DaeMomThreadDemo();
daeMomThreadDemo.setDaemon(true);
daeMomThreadDemo.start();
new ThreadDemo().start();
}
}
浙公网安备 33010602011771号