概览
我们在 java 中处理并发是家常便饭,但是协程的并发你有没有想过呢,协程是否也有java一样的并发问题?
我们知道协程是轻量级的进程,而且是可以多线程调度的。那么想想这样一个情景:
我们开启1000个协程,每个协程中对count进行自增,协程执行完成后能否拿到count==1000的结果,答案在后面的章节中,最终结论就是kkotlin也是需要处理并发的
那么这种并发该如何处理呢,我想先给你说的是,协程有自己的一套并发规则,你应该试图优先用 kotlin 的并发方法来处理协程的并发
本文主要讲几种协程处理并发的例子
模拟协程并发
模拟案例
既然是讲协程的并发,那么我们首先应该证明一下协程中存在并发问题,对吧,那就来吧。
先看一下模拟的代码:
- 代码
fun concurrent(){
val scope = CoroutineScope(Dispatchers.Default)//创建协程作用域,Default支持并发
var count=0
repeat(1000){//重复1000次,每次开启一个协程,count自增1
scope.launch {
count++
println(count)
}
}
}
fun main() = runBlocking {
concurrent()
}
本例中,我们模拟了这样一个场景,使用自定义的作用域 scope 短时间内开启 1000 个协程,协程中每次把 cou