Kotlin进程等待所有线程完成?

我写了这个简单的测试程序:

fun main() {
    println("Main Start")

    thread {
        println("Thread Start")
        Thread.sleep(3000)
        println("Thread End")
    }

    println("Main End")
}

正如我所看到的,输出是:

Main Start
Main End
Thread Start
Thread End

我的期望是至少不会打印“线程结束”消息,因为主函数已结束并且该主线程应该完成运行。

Kotlin 进程是否总是在完成之前等待线程完成?

回答

您创建的线程是一个非守护线程,就像在 Java 中一样,直到所有非守护线程都完成后,JVM 才会终止。

从Kotlin 文档可以阅读:

fun thread(
    start: Boolean = true, 
    isDaemon: Boolean = false, 
    contextClassLoader: ClassLoader? = null, 
    name: String? = null, 
    priority: Int = -1, 
    block: () -> Unit ): Thread Creates a thread that runs the specified block of code.

参数

start - 如果为 true,则线程立即启动。

isDaemon - 如果为真,则线程被创建为守护线程。当唯一运行的线程都是守护线程时,Java 虚拟机退出。

contextClassLoader - 用于在此线程中加载类和资源的类加载器。

name - 线程的名称。

优先级 - 线程的优先级。

默认情况下,Kotlin 中的线程是非守护线程。这就是为什么即使主线程已经完成执行,您仍然可以看到线程的输出。将 设置isDaemontrue,您将看到以下输出:

Main Start
Main End
Thread Start


以上是Kotlin进程等待所有线程完成?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>