主线程和守护线程
默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。
守护线程 --》只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束
- 垃圾回收器线程就是一种守护线程
- Tomcat 中的 Acceptor 和 Poller 线程都是守护线程,所以 Tomcat 接收到 shutdown 命令后,不会等待它们处理完当前请求
thread.setDaemon(true); //设置为守护线程,默认为false
应用
@Slf4j
public class Test {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
log.info("洗水壶");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("烧开水");
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "肉丸");
Thread t2 = new Thread(()->{
log.info("洗茶壶");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("洗茶杯");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("拿茶叶");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("泡茶");
},"呱呱");
t1.start();
t2.start();
}
}
查看进程线程的方法
windows
- 任务管理器查看/杀死进程
- tasklist 查看进程 tasklist | findstr
- taskkill 杀死进程 taskkill /F /PID xxx
Java
- jps 命令查看所有 Java 进程
- jstack 查看某个 Java 进程(PID)的所有线程状态
- jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)
linux
- ps -fe 查看所有进程
- ps -fT -p 查看某个进程(PID)的所有线程
- kill 杀死进程
- top 按大写 H 切换是否显示线程
- top -H -p 查看某个进程(PID)的所有线程