Kotlin之深入理解协程

1 协程基础

1.1 带问题理解协程

GlobalScope.launch(Dispatchers.Main) {
   
   
     suspendSimpleDelay()
}

suspend fun suspendSimpleDelay(): Unit {
   
   
     withContext(Dispatchers.IO) {
   
   
          delay(10000) 
     }
}

1.2 Kotlin协程中挂起的是什么?

协程。

1.3 什么是协程?

kotlin协程为launch()、async() 等中的代码,协同多个程序之间进行合作,帮助我们轻松的写出复杂的并发代码。launch在创建的一个协程,在执行到某一个suspend函数(挂起函数)时,这个协程会被 suspend(被挂起)。

1.4 协程是执行在单线程中的吗?

协程本质上还是一套基于原生Java Thread API 的封装。只要没有魔改JVM,start了几个线程,操作系统就会创建几个线程;Kotlin协程只是做了一个类似线程池的封装,根本谈不上什么性能更好。协程是协作式任务,线程是抢占式任务,本质上两者都属于并发

1.5 什么时候要用到协程的?

需要切换线程的时候要用到协程

1.5.1 挂起是怎么做到的?

在suspend修饰的挂起函数中,调用另外一个协程自带的、内部实现了协程挂起代码的挂起函数withContext(),让它来做真正的挂起,实现线程切换的工作

1.5.2 挂起的本质是什么?

挂起的本质是切线程

1.5.3 既然suspend不能真正的做到挂起函数,那么suspend的作用是什么呢?

(1)作用是:提醒,提醒调用者该函数为耗时操作,避免主线程调用了一个耗时操作。因此创建一个挂起函数,一定要在内部调用别的挂起函数,否则这个挂起函数就是没有必要的
在这里插入图片描述
(2)withContext的两种写法:

private suspend fun doWord(): Int {
   
     // 写法1
    withContext(Dispatchers.IO) {
   
   
    	delay(5000L)
        LogUtils.d(TAG, "suspendLaunch World! ${Thread.currentThread()}")
    }
    return 1
}

private suspend fun doWord2(): Int = withContext(Dispatchers.IO) {
   
    // 写法2
	delay(5000L)
    LogUtils.d(TAG, "suspend
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值