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

我只是潜入这个惊人的语言,这一件事情令我感到沮丧。 为什么没有同步的关键字?

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

给定一个关于纯kotlin的项目,如果需要处理并发性的小型高度优化组件,我们应该做些什么…我的印象是kotlin是java的一种辅助语言,在kotlin中编写90%的代码,但是一些不可能用kotlin表示的java代码。

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

科特林1.1 Coroutines被释放 ,它带来了async..await ! 在Kotlin参考文档 , Kotlinx Coroutines库和这个深入的例程中详细了解它

在Kotlin协程之外,你有这些选择:

  • Kovenant图书馆向Kotlin添加了诺言
  • Quasar库提供轻量级线程和延续
  • @Synchronized@Volatile注释直接映射到Java中的相同关键字
  • Kotlin中的synchronized块来自内联函数synchronized()
  • Kotlin有一个Kotlin.concurrent包和扩展,具有新的function,也是对JDK类的扩展。
  • 你可以访问java.util.concurrent包中的任何东西,比如ConcurrentHashMapCountdownLatchCyclicBarrierSemaphore
  • 您可以访问java.util.concurrent.locks包中的任何内容,并且Kotlin具有其中一些扩展,包括很酷的withLock()扩展函数以及ReentrantReadWriteLock类似read / write扩展 。
  • 你可以访问java.util.concurrent.atomic包中的任何东西,比如AtomicReferenceAtomicLong ,…
  • 您可以使用waitnotify对象

你拥有Java拥有的一切以及更多。 您的短语“同步和锁定”是由上面的列表满足,然后你有更多,没有语言的变化。 任何语言function只会使它更漂亮。

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

一些function的快速示例:

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