【问题标题】:Why there are no concurrency keywords in Kotlin?为什么 Kotlin 中没有并发关键字?
【发布时间】:2016-06-01 22:16:21
【问题描述】:

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

到目前为止,我的研究为我提供了一种解决方案,您可以包装一些高级类并使用它们来处理并发。

给定一个纯 Kotlin 的项目,如果需要一个小型高度优化的组件来处理并发等,该怎么办?

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

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

【问题讨论】:

标签: java concurrency kotlin


【解决方案1】:

Kotlin 1.1 with Coroutines was released 它带来了async..await!在Kotlin reference docsKotlinx Coroutines library 中阅读更多相关信息,并深入了解Couroutines by Example

在 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(...)
}

【讨论】:

  • 有什么例子吗?因为如果我在方法上写同步,它就不会接受它......与 volatile 一样......
  • @vach 我在你的问题下在我的评论中提供了链接。 Synchronized 和 Volatile 是注解。
  • @vach 如果您尝试过代码,它应该与任何错误消息一起包含在您的问题中。
  • @JBNizet 我已合并到您的链接中
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多