zoukankan      html  css  js  c++  java
  • Kotlin协程重要概念介绍

    1. CoroutineScope

        可以理解为协程本身,包含了CoroutineContext。

    2. CoroutineContext

        CoroutineContext叫做协程上下文,是一些元素的集合,主要包括Job和CoroutineDispatcher元素,可以代表-协程的场景。

    3. EmptyCoroutineContext

        表示一个空的协程上下文。

    4. CoroutineDispatcher

        CoroutineDispatcher是协程调度器,决定协程所在的线程或线程池。它可以指定协程运行于特定的一个线程、一个线程池或者不指定任何线程(这样协程就会运行于当前线程)。

        在coroutines-core中CoroutineDispatcher有三种标准实现:Dispatchers.Default、Dispatchers.lO,Dispatchers.Main和Dispatchers.Unconfined(Unconfined就是不指定线程)

        launch函数定义如果不指定CoroutineDispatcher或者没有其他的Continuationlnterceptor,默认的协程调度器就是Dispatchers.Default,Default是一个协程调度器,其指定的线程为共有的线程池,线程数量至少为2,最大与CPU数相同。

    5. Job & Deferred

    5.1 Job

        Job,任务,封装了协程中需要执行的代码逻辑。Job可以取消并且有简单的生命周期,它有三种状态:

        

    image.png

        Job完成时是没有返回值的,如果需要返回值的话,应该使用Deferred,它是Job的子类

    5.2 Deferred

        Deferred有返回值,其他同Job。

    6. Coroutine builders

        CoroutineScope.launch函数属于协程构建器Coroutine builders,Kotlin中还有其他几种Builders,负责创建协程。

    1. CoroutineScope.launch{}是最常用的Coroutine builders,不阻塞当前线程,在后台创建一个新协程,也可以指定协程调度器。

    2. runBlocking{}是创建一个新的协程同时阻塞当前线程,直到协程结束。这个不应该在协程中使用,主要是为main函数和测试设计的。

    3. withContext{}不会创建新的协程,在指定协程上运行挂起代码块,并挂起该协程直至代码块运行完成。

    4. async{},CoroutineScope.async可以实现与launch builder一样的效果,在后台创建一个新协程,唯一的区别是它有返回值,因为CoroutineScope.async{}返回的是Deferred类型。

  • 相关阅读:
    eureka的fetch-registry属性解释
    数据结构设计
    typescript let和const区别
    JDK8新特性
    Synchronized的内存可见性
    java实现打印功能
    idea单元测试jpa注入失败问题----来自Spring Cloud微服务实战-idea版的 廖师兄的product
    eclipse快速生成接口
    读取 Excel 之 Epplus
    [转][Dapper]参数化查询慢
  • 原文地址:https://www.cnblogs.com/soclear/p/13801023.html
Copyright © 2011-2022 走看看