为什么 Kotlin 中没有并发关键字?

2022-08-31 09:51:28

为什么没有同步和并发的关键字?

到目前为止,我的研究给了我一个解决方案,你包装一些高级类,并使用它们来处理并发性。

给定一个纯 Kotlin 中的项目,如果需要一个以线程安全的方式处理并发性的小型、高度优化的组件,该怎么办?

我的印象是,Kotlin 是 Java 的辅助语言,在 Kotlin 中编写 90% 的代码,但有一些 Java 代码是 Kotlin 无法表达的。

这是对的吗?这是它本来的样子吗?


答案 1

带有 Coroutines 的 Kotlin 1.1 发布,它带来了它!在 Kotlin 参考文档Kotlinx Coroutines 库和这个深度的 Couroutines by Example 中阅读更多相关信息async..await

在 Kotlin 协程之外,您有以下选择:

你拥有Java拥有的一切,甚至更多。您的短语“同步和锁定”被上面的列表满足了,然后您拥有更多并且没有语言更改。任何语言功能只会让它更漂亮一些。

因此,您可以使用小型Kotlin运行时,JDK中的JVM运行时以及要使用的任何其他JVM库,拥有100%的Kotlin代码。不需要Java代码,只需要Java(as-in JVM)库。

一些功能的快速示例:

class SomethingSyncd {
    @Synchronized fun syncFoo() {
        
    }
    
    val myLock = Any()
    
    fun foo() {
        synchronized(myLock) {
            // ... code
        }
    }
    
    @Volatile var thing = mapOf(...)
}

答案 2

我将回答我自己的问题,因为我的问题的实际答案是在kotlin讨论的某个地方。

当时我从Java开始感到困惑的是,并发关键字不是语言关键字,而是注释?对我来说,通过注释来处理同步等重要概念似乎很奇怪,但现在它变得非常有意义。Kotlin 正朝着与平台无关的语言的方向发展,它不仅适用于 JVM,而且几乎适用于其他任何东西。因此,同步和易失性对于JVM来说非常具体,例如在javascript中可能不需要它们。

简而言之,Kotlin 拥有 Java 所拥有的一切(除了包可见性),还有更多,一个没有其他语言的巨大区别是协程。但是你不能用Java编写任何你在Kotlin中做不到的事情......(据我所知)


推荐