kotlin: 协程的启动模式LAZY

一,协程的四大启动模式

image

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)
            }
        }

运行结果:

image

三,例二, 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)
            }
        }

运行结果:

image

posted @ 2025-08-09 13:40  刘宏缔的架构森林  阅读(11)  评论(0)    收藏  举报