Java Kotlin进程是否等待所有线程完成?

Java Kotlin进程是否等待所有线程完成?,java,multithreading,kotlin,parallel-processing,Java,Multithreading,Kotlin,Parallel Processing,我编写了这个简单的测试程序: fun main() { println("Main Start") thread { println("Thread Start") Thread.sleep(3000) println("Thread End") } println("Main End") } 如我所见,输出为: Main Star

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

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在所有非守护进程线程完成之前不会终止

从中可以看出:

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.
参数

启动-如果为true,线程将立即启动

isDaemon-如果为true,则将该线程创建为守护进程线程Java 当运行的线程都是守护进程时,虚拟机退出 线程。

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

name-线程的名称

优先级-线程的优先级

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

Main Start
Main End
Thread Start