JUC并发编程 -- 主线程与守护线程

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC并发编程 -- 主线程与守护线程相关的知识,希望对你有一定的参考价值。

1. 主线程与守护线程

默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。


1.1 非守护线程

Java 进程需要等待所有 非守护线程都运行结束,才会结束

代码:

import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "c.Test15")
public class Test15 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            while (true) {
                if (Thread.currentThread().isInterrupted()) {
                    break;
                }
            }
            log.debug("结束");
        }, "t1");
//        t1.setDaemon(true);
        t1.start();

        Thread.sleep(1000);
        log.debug("结束");
    }
}

运行结果:

原因:

t1线程是非守护线程,由于它一直在运行,所以进程迟迟没有结束


1.2 守护线程

只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,Java进程也会强制结束。

代码:

运行结果:

1.3注意:



以上是关于JUC并发编程 -- 主线程与守护线程的主要内容,如果未能解决你的问题,请参考以下文章

JUC 高并发编程

JUC 高并发编程

JUC 高并发编程

54_并发编程-线程-守护线程

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

python 并发编程 多线程 守护线程