解决并发的方法
解决并发的问题既可以使用 java 中的部分方式,也可以使用 kotlin 自有的方式。协程自有的处理方法适用性更广一些。
java 方式解决
如果我们想使用java的方式解决并发,那么我们可以尝试让协程运行在单线程中,也可以尝试使用Atomic方式
单线程解决方法
我们将 模拟并发章节的代码进行一些改动试试:
- 代码
fun concurrent() {
val scope = CoroutineScope(Dispatchers.Unconfined)//创建协程作用域,使用Unconfined,这样在协程被挂起前都不会改变线程,也就是说协程始终运行在单线程中
var count = 0
repeat(1000) {//重复1000次,每次开启一个协程,count自增1
scope.launch {
println(“线程id:${Thread.currentThread().id}”)//这个线程始终不会变,除非你在这里挂起
count++
println(count)
}
}
}
- 日志
994
线程id:1
995
线程id:1
996
线程id:1
997
线程id:1
998
线程id:1
999
线程id:1
1000
- 结论
本例代码中因为launch始终运行在单线程中所以最终输出coun