kotlin: 协程的启动方式的不同:launch/runBlocking/async

一,代码:

       //launch
       binding.button1.setOnClickListener {
            println("点击代码块开始:")
                
            GlobalScope.launch {                // 1
                println("Launch执行开始")        // 2
                delay(1000L)                    // 3
                println("Launch执行结束")        // 4
            }
            
            println("Sleep执行开始")            	// 5
            Thread.sleep(2000L)                 // 6
            println("Sleep执行结束")

            println("点击代码块结束")
        }
        //runBlocking
        binding.button2.setOnClickListener {

            println("点击代码块开始:")

            runBlocking {                // 1
                println("runBlocking执行开始")        // 2
                delay(1000L)                    // 3
                println("runBlocking执行结束")        // 4
            }

            println("Sleep执行开始")            	// 5
            Thread.sleep(2000L)                 // 6
            println("Sleep执行结束")

            println("点击代码块结束")
        }

        //async
        binding.button3.setOnClickListener {

            println("点击代码块开始:")

            runBlocking {                // 1
                println("runBlocking执行开始")        // 2

                val delayed = async {
                    println("inner begin:")
                    // 模拟网络请求
                    delay(1500)  // 假设网络请求延迟1.5秒
                    println("inner end:")
                    "数据获取成功"    //返回
                }
                println("得到delayed:")
                val retData = delayed.await()
                println("得到返回数据:"+retData)
                println("runBlocking执行结束")        // 4
            }

            println("Sleep执行开始")            	// 5
            Thread.sleep(2000L)                 // 6
            println("Sleep执行结束")

            println("点击代码块结束")
        }

不同之处:

launch启动协程不带有阻塞属性

runBlocking是带有阻塞属性的,它会阻塞当前线程的执行

async{} 创建协程不会阻塞,并且还能通过它返回的句柄拿到协程的执行结果

二,运行结果:

launch

runBlocking

async

posted @ 2025-07-19 07:44  刘宏缔的架构森林  阅读(56)  评论(0)    收藏  举报