【Kotlin】Kotlin协程中的同步:Synchronized?Mutex!

协程中尽量不要使用synchronized,因为这会使线程阻塞。

在协程中,使用Mutex类来实现类似于多线程中synchronized同步的作用。

    var value = 0
    repeat(100) {
        GlobalScope.launch(Dispatchers.Default) {
            repeat(10000) {
                value++
            }
        }
    }
    sleep(1000)
    println("value = $value")

以上代码开启了100个协程,每个协程执行10000次value++。这样做的结果就是协程之间不同步造成的不安全。

使用Mutex来进行同步,保证协程安全:

    var value = 0
    val mutex = Mutex()
    repeat(100) {
        GlobalScope.launch(Dispatchers.Default) {
            mutex.withLock {
                repeat(10000) {
                    value++
                }
            }
        }
    }
    sleep(1000)
    println("value = $value")

你可能感兴趣的:(【Kotlin】Kotlin协程中的同步:Synchronized?Mutex!)