【2025最新版Kotlin教程】Kotlin第一行代码系列第十七课-协程切换线程

122 阅读1分钟
【2025最新版Kotlin教程】Kotlin第一行代码系列第十七课-协程切换线程

协程中有CoroutineContext参数的就可以切换线程:就是我的协程要在什么线程中运行。 在Android开发中一般只有主线程和IO线程切换即可

创建协程中的方式都可以切换线程

示例代码:

fun main() {
    //看下之前的例子,观察线程名是否一样
    //关键有CoroutineContext参数的就可以随便切换线程
    GlobalScope.launch(Dispatchers.IO) {
        println("Coroutine in:${Thread.currentThread().name}")
        //这里就是协程域了,可以调任何协程的方法
        println("Hello 协程1")
        // 协程的延迟操作,后面的代码要等延迟跑完
        delay(1000L)
        println("Hello 协程")
    }
    println("out thread:${Thread.currentThread().name}")
    // 延迟主线程,要不main函数一瞬间就跑完,进程就结束了,自然你就看不到上面协程的输出了
    Thread.sleep(2000L)


    /**
     * 顺便讲下CoroutineStart参数
     * 最常用的其实是 DEFAULT 和 LAZY
     *
     * LAZY 是懒汉式启动,launch 后并不会有任何调度行为,协程体也自然不会进入执行状态,直到我们需要它执行的时候。
     *   调用 Job.start,主动触发协程的调度执行
     *   调用 Job.join,隐式的触发协程的调度执行
     *   调用 async.await()
     */
     fun lazyTest() {
        println(1)
        val job = GlobalScope.launch(start = CoroutineStart.LAZY) {
            println(2)
        }
        println(3)
        job.start()//协程开始
        println(4)

        //不让程序结束这么快
        Thread.sleep(5000L)
    }
    lazyTest()

}
整个kotlin教程的源码项目结构图:

在这里插入图片描述
有问题或者完整源码的可以看简介联系我,也可以私信我,我每天都看私信的