06Kotlin协程并发安全
协程并发安全 不安全的并发访问 使用线程在解决并发问题的时候总是会遇到线程安全的问题,而 Java 平台上的 Kotlin 协程实现免不了存在并发调度的情况,因此线程安全同样值得留意。 @Test fun `test not safe concurrent`() = runBlocking<Unit> { var count = 0 List(1000) {...
协程并发安全 不安全的并发访问 使用线程在解决并发问题的时候总是会遇到线程安全的问题,而 Java 平台上的 Kotlin 协程实现免不了存在并发调度的情况,因此线程安全同样值得留意。 @Test fun `test not safe concurrent`() = runBlocking<Unit> { var count = 0 List(1000) {...
协程取消和超时 协程取消 协程之间的关系 父协程手动调用 cancel() 或者异常结束,会立即取消它的所有子协程;取消协程作用域会取消它的子协程。 父协程必须等待所有子协程完成(处于完成或者取消状态)才能完成。 子协程抛出未捕获的异常时,默认情况下会取消其父协程。 抛出 CancellationException 或者调用 cancel() 只会取消当前协程和子协程...
协程挂起 什么是 suspend 挂起函数? 函数前面有 suspend 修饰符标记,这表示函数都是挂起函数。 suspend 函数特点 挂起函数可能会挂起协程 挂起函数使用 CPS style 的代码来挂起协程,保证挂起点后面的代码只能在挂起函数执行完后才能执行,所以挂起函数保证了协程内的顺序执行顺序。 fun postItem(item: Item) { Global...
协程异常处理 协程异常的传播 协程构建器有两种形式:⾃动传播异常(launch 与 actor)或向⽤户暴露异常(async 与 produce)。当这些构建器⽤于创建⼀个根协程时,即该协程不是另⼀个协程的⼦协程时: launch 和 actor 发生异常且非 CancellationException 异常的话,会传递给 UncaughtExceptionHandler 处理,...
协程启动 (协程上下文、启动模式、协程作用域) 协程上下文 CoroutineContext CoroutineContext 介绍 CoroutineContext,协程上下文,它是一个包含了用户定义的一些各种不同元素的 Element 对象集合。其中主要元素是: 协程的生命周期的句柄 Job 协程调度器 CoroutineDispatcher 协程的异常处理 C...
协程 coroutines 入门 https://developer.android.com/kotlin/coroutines https://github.com/dmytrodanylyk/coroutine-recipes 协程简介 协程是什么? 官方描述: 协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步...
kotlin 使用 Parcelize 注解简化 Parcelable 的书写 kotlin 在 1.1.4 版本增加了对 parcelable 的支持 Android 扩展插件现在包含一个实现了 Parcelable 的自动生成器。在主构造函数中声明序列化的属性并添加一个 @Parcelize 注解,生成器就会自动创建 writeToParcel()/createFromParcel(...
JVM 基础 JVM 概念 JVM 是 java 的核心,是 Java 可以一次编译到处运行的本质所在。JVM 与操作系统的关系:从图中可以看到,有了 JVM 这个抽象层之后,Java 就可以实现跨平台了。JVM 只需要保证能够正确执行 .class 文件,就可以运行在诸如 Linux、Windows、MacOS 等平台上了。 JVM 的组成和运行原理 JVM 有多种实现,使用最广泛...
JVM 指令 指令简介 计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。通常一条指令包括两方面的内容:操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。 JVM 指令简介 Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个...
JVM 和 DVM(DalvikVM) 区别 JVM 和 DVM 的区别 执行的文件格式不同 JVM 运行的是 class 字节码文件,而 dvm 运行自己定义的 dex 文件格式 是否可以同时存在多个虚拟机 JVM 只能同时存在一个实例;dvm 可同时存在多个实例(好处是,其他 dvm 挂了,不会影响其他应用,保证了系统稳定性) Java VM 是以基于栈的虚拟机 (Sta...