我写了一个简单的测试程序:
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进程总是在线程完成之前等待线程完成吗?
1条答案
按热度按时间1szpjjfi1#
您创建的线程是一个非守护进程线程,与java中的线程一样,jvm在所有非守护进程线程完成之前不会终止。
从kotlin文档中可以看到:
参数
start-如果为true,线程将立即启动。
isdaemon—如果为true,则将线程创建为守护进程线程。当运行的线程都是守护进程线程时,java虚拟机退出。
contextclassloader—用于加载此线程中的类和资源的类加载器。
name—线程的名称。
优先级-线程的优先级。
默认情况下,kotlin中的线程是非守护进程线程。这就是为什么即使主线程已经完成了它的执行,您仍然可以看到线程的输出。设置
isDaemon
至true
,您将看到以下输出: