Kotlin协程

添加依赖

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9"

创建协程

  1. GlobalScope.launch - 创建协程
public fun CoroutineScope.launch(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit
): Job
  1. GlobalScope.async - 创建带返回值的协程,返回的是 Deferred 类
public fun <T> CoroutineScope.async(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> T
): Deferred<T>
  1. withContext - 不创建新的协程,在指定协程上运行代码块
  2. runBlocking - 不是 GlobalScope 的 API,可以独立使用,区别是 runBlocking 里面的 delay 会阻塞线程,而 launch 创建的不会

launch和async的参数和返回值

  • CoroutineContext - 可以理解为协程的上下文,有4种线程模式:
    • Dispatchers.Default - 默认,它由JVM上的共享线程池支持。默认情况下,使用的最大并行级别等于CPU内核的数量,但至少是两个
    • Dispatchers.IO - 它的设计目的是将阻塞的IO任务下放到共享的线程池中
    • Dispatchers.Main - 协程挂起恢复后,始终在main线程上执行
    • Dispatchers.Unconfined - 一个不局限于任何特定线程的协同调度程序
  • CoroutineStart - 启动模式,默认是DEFAULT,除了LAZY都是创建就启动
    • DEFAULT - 根据上下文立即安排协同程序的执行
    • LAZY - 只有在需要时才懒散地启动协同工作,需要job.start()
    • ATOMIC - 以不可取消的方式根据上下文调度协同程序执行
    • UNDISPATCHED - 立即执行协程,直到它的第一个挂起点_in当前线程
  • block - 方法体,定义协程内执行的操作
  • Job和Deferred - Deferred继承自Job
    • job.start() - 启动协程,除了 lazy 模式,协程都不需要手动启动
    • job.join() - 等待协程执行完毕
    • job.cancel() - 取消一个协程
    • job.cancelAndJoin() - 等待协程执行完毕然后再取消
    • deferred.await() - 在不阻塞线程的情况下等待该值完成,并在延迟计算完成后继续执行,返回结果值或抛出相应的异常,如果延迟被取消

suspend

suspend 表示挂起的意思,用来修饰方法的,一个协程内有多个 suspend 修饰的方法顺序书写时,代码也是顺序运行的,suspend 函数会将整个协程挂起,而不仅仅是这个 suspend 函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值