一.协程的一些前置知识 1.1 进程和线程 1.1.1基本定义 1.1.2为什么要有线程 1.1.3 进程与线程的区别 1.2 协作式与抢占式 1.2.1 协作式 1.2.2 抢占式 1.3 协程 二. Kotlin 协程的基本使用 2.1 创建协程的三种方式 2.2 等待一个作业 2.3 协程的取消 2.4 等待协程的执行的结果 2.5 协程的异常处理 2.6 协程的超时 三.并发与挂起函数 3.1 使用 async 并发 3.2 惰性启动 async 3.3 挂起函数 3.4 协程和挂起的本…
vivo 互联网客户端团队- Ruan Wen 本文是Kotlin协程解析系列文章的开篇,主要介绍Kotlin协程的创建.协程调度与协程挂起相关的内容 一.协程引入 Kotlin 中引入 Coroutine(协程) 的概念,可以帮助编写异步代码. 在使用和分析协程前,首先要了解一下: 协程是什么? 为什么需要协程? 协程最为人称道的就是可以用看起来同步的方式写出异步的代码,极大提高了代码的可读性.在实际开发中最常见的异步操作莫过于网络请求.通常我们需要通过各种回调的方式去处理网络请求,很容易就陷…
Kotlin协程第一个示例剖析: 上一次https://www.cnblogs.com/webor2006/p/11712521.html已经对Kotlin中的协程有了理论化的了解了,这次则用代码来直观的感受一下协程,先用一个Hello World级别的示例来进行,这里新建一个工程: 默认的gradle的配置如下: 下面得修改一下,增加协程相关的依赖: 此时编译完之后就会有如下依赖包: 然后再建一个kotlin的源代码目录,目前只有一个java: 好,接下来新建一个Kotlin的测试文件开始撸码…
Retrofit2.6开始增加了对Kotlin协程的支持,可以通过suspend函数进行异步调用.本文简单介绍一下Retrofit中协程的使用 导入依赖 app的build文件中加入: implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' 注意依赖版本 data class data class ResultData<T…
开发环境 IntelliJ IDEA 2021.2.2 (Community Edition) Kotlin: 212-1.5.10-release-IJ5284.40 我们已经通过第一个例子学会了启动协程,这里介绍一些协程的基础知识. 阻塞与非阻塞 runBlocking delay是非阻塞的,Thread.sleep是阻塞的.显式使用 runBlocking 协程构建器来阻塞. import kotlinx.coroutines.* fun main() { GlobalScope.laun…
Android官方推荐使用协程来处理异步问题.以下是协程的特点: 轻量:单个线程上可运行多个协程.协程支持挂起,不会使正在运行协程的线程阻塞.挂起比阻塞节省内存,且支持多个并行操作. 内存泄漏更少:使用结构化并发机制在一个作用域内执行多项操作. 内置取消支持:取消操作会自动在运行中的整个协程层次结构内传播. Jetpack集成:许多Jetpack库都包含提供全面协程支持的扩展.某些库还提供自己的协程作用域,可用于结构化并发. 示例 首先工程中需要引入Kotlin与协程.然后再使用协程发起网络请求…
本文探讨的是在tomcat服务端接口编程中, 异步servlet场景下( 参考我另外一个文章),用rxjava来改造接口为全流程异步方式 好处不用说 tomcat的worker线程利用率大幅提高,接口的并发能力提升 全流程无阻塞等待式(非例如像Future.get这种伪异步) 业务逻辑处理上多个操作上无依赖的可以并发处理,接口性能大幅提高 但是缺点也没法逃避 编码复杂度增加 回调地狱,原来同步几十行代码可能要变成几百行代码 难以调试,大部分代码都是以链式表达式的形式出现,出错了问题定位难 解决这…
Coroutines Channels Java中的多线程通信, 总会涉及到共享状态(shared mutable state)的读写, 有同步, 死锁等问题要处理. 协程中的Channel用于协程间的通信, 它的宗旨是: Do not communicate by sharing memory; instead, share memory by communicating. Channel basics channels用于协程间的通信, 允许我们在不同的协程间传递数据(a stream of…
Job详解: 在上一次https://www.cnblogs.com/webor2006/p/11725866.html中抛出了一个问题: 所以咱们将delay去掉,需要改造一下,先把主线程的delay给注释掉: 那怎么做呢?这里先来看一下GlobalScope.launch()方法的返回值: 咱们先来回顾一下之前Job的理论描述: 简单看一下官方的对它的说明: 其它的就暂且不读了,那能拿到Job是不是可以通过它来达到我们精准等待协程执行完的目的呢?所以首先咱们来获取它的返回值: 那重点就是怎么…
在上次我们是通过了这种方式来创建了一个协程: 接着再来看另一种创建协程的方式: 下面用它来实现上一次程序一样的效果,先来回顾一下上一次程序的代码: 好,下面改用runBlocking的方式: 运行一下: 其它的代码不用多解释,重点是这块: 好,对于咱们已经在用的协程相关的类下面来读一读它们官方的javadoc: 首先先来看一下它,先看下GlobalScope: 开读: 看上面的代码好亲切,因为我是一个Android开发者~~不过目前还木有真实用Koltin编写过Android项目,还在Kotli…