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

w8ntj3qf  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(314)

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

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进程总是在线程完成之前等待线程完成吗?

1szpjjfi

1szpjjfi1#

您创建的线程是一个非守护进程线程,与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—如果为true,则将线程创建为守护进程线程。当运行的线程都是守护进程线程时,java虚拟机退出。
contextclassloader—用于加载此线程中的类和资源的类加载器。
name—线程的名称。
优先级-线程的优先级。
默认情况下,kotlin中的线程是非守护进程线程。这就是为什么即使主线程已经完成了它的执行,您仍然可以看到线程的输出。设置 isDaemontrue ,您将看到以下输出:

Main Start
Main End
Thread Start

相关问题