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 中的线程是非守护线程。这就是为什么即使主线程已经完成执行,您仍然可以看到线程的输出。将 设置isDaemon为true,您将看到以下输出:
Main Start
Main End
Thread Start