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

vac*_*ach 61 java concurrency kotlin

我只是潜入这种神奇的语言,这一件事让我感到沮丧.为什么没有用于同步的关键字?

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

给定一个关于纯kotlin的项目,如果需要一个处理并发性等的小型高度优化组件,那么该怎么办...我的印象是kotlin是Java的一种辅助语言,在kotlin中编写90%的代码但是有一些用kotlin无法表达的java代码.

这是正确的吗?这是它的目的是什么?

Jay*_*ard 119

带有Coroutines的Kotlin 1.1已经发布,它带来了它async..await!在Kotlin参考文档,Kotlinx Coroutines库中了解更多相关信息,并通过示例深入了解Couroutines

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

你拥有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(...)
}
Run Code Online (Sandbox Code Playgroud)

  • @vach 在你的问题下,我在评论中给出了链接。Synchronized 和 Volatile 是注解。 (2认同)
  • 请不要破坏“你的”答案来发表关于你不赞成 Kotlin 背后的公司的个人声明。一旦您发布了答案,它就不再是您的财产。如果您希望个人不参与问答,可以通过批准的方法来做到这一点。 (2认同)

vac*_*ach 7

我会回答我自己的问题,因为我的问题的实际答案是在 kotlin 讨论的深处。

当时来自 Java 的让我感到困惑的是,并发关键字不是它们是注释的语言关键字?对我来说,像同步这样的重要概念是通过注释处理的,这似乎很奇怪,但现在它完全有道理了。Kotlin 正朝着成为一种平台无关语言的方向发展,它不仅适用于 JVM,而且几乎适用于任何东西。因此 synchronized 和 volatile 非常特定于 JVM,例如在 javascript 中可能不需要它们。

简而言之,Kotlin 拥有 Java 所拥有的一切(包可见性除外),还有更多其他语言所没有的巨大差异是协程。但是没有什么是你可以用 Java 写的,而你在 Kotlin 中是做不到的......(据我所知)