【发布时间】:2019-02-11 06:02:42
【问题描述】:
在 Java 中,当主线程退出时,所有用户线程(非守护线程)将继续运行,直到它们完成工作。
我有一个简单的程序,可以将 1 到 5 的计数器打印到控制台。
Java 版本:
fun main(args: Array<String>) {
println("Main start")
countWithThread()
println("Main end")
}
fun countWithThread() {
Thread(Runnable {
for (i in 1..5) {
println("${Thread.currentThread().name} count $i")
Thread.sleep(10)
}
}).start()
}
输出:
Main start
Main end
Thread-0 count 1
Thread-0 count 2
Thread-0 count 3
Thread-0 count 4
Thread-0 count 5
Process finished with exit code 0
Kotlin 版本:
fun main(args: Array<String>) {
println("Main start")
countWithCoroutine()
println("Main end")
}
fun countWithCoroutine() {
launch(CommonPool) {
for (i in 1..5) {
println("${Thread.currentThread().name} count $i")
delay(10)
}
}
}
输出:
Main start
Main end
Process finished with exit code 0
如您所见,当主线程退出时,协程中的代码不再运行。似乎 Kotlin 在后台终止了所有协程。
谁能告诉我当主线程退出时协程到底发生了什么?
【问题讨论】: