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

时间:2016-02-20 07:51:12

标签: java concurrency kotlin

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

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

鉴于纯Kotlin中的项目,如果需要一个处理并发性的小型高度优化组件,该怎么办?

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

这是对的吗?这是它的目的是什么?

2 个答案:

答案 0 :(得分:108)

Kotlin 1.1 with Coroutines was released它带来data = dataItems.Take(); !在Kotlin reference docsKotlinx Coroutines library中了解详情,深入了解Couroutines by Example

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

答案 1 :(得分:2)

我将回答自己的问题,因为对我的问题的实际答案在科特林讨论中很深。

从Java来的时候,让我感到困惑的是并发关键字不是它们是注释的语言关键字吗?在我看来,像同步这样的重要概念通过注解进行处理似乎很奇怪,但是现在这很有意义了。 Kotlin正朝着成为平台不可知语言的方向发展,它不仅会在jvm上运行,而且会在几乎所有平台上运行。因此,同步和易失性是jvm特有的,例如,在javascript中可能不需要它们。

简而言之,kotlin具有Java具备的所有功能(包可见性除外)以及更多其他功能,协同程序是其他语言所没有的巨大差异。但是没有什么可以用kotlin编写的,不能用Java写...(据我所知)