1概述
目录
前言
Kotlin协程,现在已经成为了面试甚至是工作中一个非常火的东西。
本人在刚开始了解Kotlin协程的时候,断断续续看了网上不少文章,用长篇大论把Kotlin协程描述的非常玄乎,但是看完后还是依然云里雾里,所以决定来写一篇关于协程的文章,希望能够帮助大家能够更快的上手Kotlin协程.
注意:如果没有特殊提及,文中所有“协程”均代表“Kotlin协程”
2为什么要学习Kotlin协程?(官方版)
现在Android技术栈上的新东西层出不穷,kotlin、jetpack、flutter等等。很多人是为了准备面试而学习,所以往往往更偏向于去看一些概念性的东西,以便面试的时候能够蒙混过关。
但是我觉得,我们还是先要了解这个新的技术能够给我们的开发带来哪些实质性的帮助,我们再去针对性学习可能会更加有意义.
我们先来看看Kotlin官网是怎么体现使用协程的优势的
https://www.kotlincn.net/docs/reference/coroutines/basics.html
网上很多文章也用这个例子,也用这个官方例子来说明使用协程的优势,然后就说协程是什么轻量级的线程,又是什么用户态的,协程像线程但又不是线程...诸如此类。
所以很多人自认为学会了协程,最后就可能只能说出来使用协程的目的是比线程性能更好。
先不说这些概念对不对,我相信对于一个普通的Android开发来说,听到这些概念,第一反应肯定觉得协程这个东西非常的神秘且不好理解。
所以,不好理解我们就先不理解,我们先基于我们已有的知识来分析一下官网这个例子。
官网这个例子就是通过repeat函数启动了10000个协程,然后它让我们试一试使用Thread来实现会发生什么,也就是像下面这样:
repeat(100_000){ thread{ Thread.sleep(1000L) print(""."") }}
这个例子我们不用跑也知道大概会发生什么了。
但是,我想说的是,kotlin官方用这个例子真的有点不厚道了,用java底层的Thread类,和他们造出来的一个基于Thread类封装的“工具包”进行对比。
真正要比的话,我们用java的Executor和他比比?
repeat(100_000) { val executor = Executors.newSingleThreadScheduledExecutor() val task = Runnable { print(".") } repeat(100_00) { executor.schedule(task, 1, TimeUnit.SECONDS) }}
<pre style=