kotlin 协程初探
delay用法
想在 kotlin 的 main 函数中测试协程 delay 的作用,开始写法如下:
class TestDelay {
companion object {
@JvmStatic
fun main(args: Array<String>) {
println("begin")
GlobalScope.launch {
val chatToggleDelay: Pair<Long, Long> = 1000L to 5000L
println("hello")
chatToggleDelay.run {
println("Tom")
delay(Random.nextLong(first, second))
println("Jim")
}
println("world")
}
println("end")
}
}
}
运行结果如下
begin
end
hello
Tom
Process finished with exit code 0
delay 没有起到挂起协程的作用?有点蒙~
经同事指点,说是main函数执行结束后,进程关掉,其中开启的协程会被干掉,故修改如下验证:
class TestDelay {
companion object {
@JvmStatic
fun main(args: Array<String>) {
println("begin")
GlobalScope.launch {
val chatToggleDelay: Pair<Long, Long> = 1000L to 5000L
println("hello")
chatToggleDelay.run {
println("Tom")
delay(Random.nextLong(first, second))
println("Jim")
}
println("world")
}
println("end")
Thread.sleep(6000) // 阻塞线程6s,保证main函数6s内不结束,进而保证上边的协程不被干掉
}
}
}
修改后打印结果如下:
begin
end
hello
Tom
Jim
world
Process finished with exit code 0
流程正确!
参考:https://blog.csdn.net/zhaoyanjun6/article/details/87867617
总结如下:
上述说明 kotlin 中的协程跟 java 中的线程不一样,具体不同,有待进一步了解。