kotlin: 协程的启动模式LAZY
一,协程的四大启动模式
LAZY
是懒汉式启动,launch
后并不会有任何调度行为,协程体也自然不会进入执行状态,直到我们需要它执行的时候。
当需要它的运行结果的时候, launch
调用后会返回一个 Job
实例,对于这种情况,我们可以:
- 调用
Job.start
,主动触发协程的调度执行 - 调用
Job.join
,隐式的触发协程的调度执行
因为join
要等待协程执行完毕,而start则是立即执行协程,
所以两者执行时输出的顺序会不同,
二,例一:start
定义log函数
val dateFormat = SimpleDateFormat("HH:mm:ss:SSS")
val now = {
dateFormat.format(Date(System.currentTimeMillis()))
}
fun log(msg: Any?) = println("${now()} [${Thread.currentThread().name}] $msg")
调用:
//处理按钮点击事件
binding.button1.setOnClickListener {
runBlocking {
//listDemo()
log("c1:"+1)
val job1 = launch(start = CoroutineStart.LAZY) {
log("c1:"+2)
}
log("c1:"+3)
job1.start()
log("c1:"+4)
}
}
运行结果:
三,例二, join
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
runBlocking {
log("c2:"+1)
val job2 = launch(start = CoroutineStart.LAZY) {
log("c2:"+2)
}
log("c2:"+3)
job2.join()
log("c2:"+4)
}
}
运行结果: