gpt4 book ai didi

java - Kotlin 同步

转载 作者:行者123 更新时间:2023-12-02 02:42:16 31 4
gpt4 key购买 nike

过去几周我一直在研究java多线程。我了解了synchronized,并理解synchronized避免了多个线程同时访问相同的属性。我编写此代码是为了在同一线程中运行两个线程。

val gate = CyclicBarrier(3)
val obj = SynchronizedCounter()

var nah = object : Thread() {
override fun run() {
gate.await()
obj.increment()
}
}

var blah = object : Thread() {
override fun run() {
gate.await()
println(obj.value())
}
}

nah.start()
blah.start()

gate.await()

class SynchronizedCounter {
private var c = 0

@Synchronized
fun increment() {
c++
}

@Synchronized
fun decrement() {
c--
}

@Synchronized
fun value(): Int {
return c
}
}

输出:0不会返回1吗?因为第二个线程在第一个线程之后运行

最佳答案

nahblah 都将作业设置为在与自己不同的线程上运行。因此,当它们各自调用 start 时,它们只是标记线程调度程序来启动它们。 start 立即返回,当前线程继续运行主代码行,直到发生某些事情使其推迟。此时,调度程序会执行它的操作,运行任何准备就绪并等待运行的内容。您不应期望特定的顺序,也不应尝试预测顺序。这就是为什么您需要在代码中使用同步结构。

您可以在单线程执行器上运行任务,如 this 中所示。所以答案(但对于java,你必须适应)。

关于java - Kotlin 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247999/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com