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类型。

原文地址:https://www.cnblogs.com/soclear/p/13801023.html