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

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

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

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

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

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

最佳答案

Kotlin 1.1 with Coroutines was released它带来了 async..await!在 Kotlin reference docs 中了解更多信息, Kotlinx Coroutines library和这个伟大的深度Couroutines by Example

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

  • Kovenant library向 Kotlin 添加 Promise
  • Quasar library提供轻量级线程和延续
  • @Synchronized@Volatile直接映射到 Java 中相同关键字的注解
  • synchronized blocks在 Kotlin 中,它来自一个内联函数 synchronized()
  • Kotlin 有一个 Kotlin.concurrent package and extensions具有新功能以及对 JDK 类的扩展。
  • 您可以访问 java.util.concurrent package 中的任何内容如ConcurrentHashMapCountdownLatchCyclicBarrierSemaphore、...
  • 您可以访问 java.util.concurrent.locks package 中的任何内容Kotlin 有 extensions for a few of these包括酷withLock() extension function和类似的read/write extensions对于 ReentrantReadWriteLock
  • 您可以访问 java.util.concurrent.atomic package 中的任何内容如AtomicReferenceAtomicLong、...
  • 您可以使用 wait and notify on objects

您拥有 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(...)
}

https://stackoverflow.com/questions/35520583/

相关文章:

spring - 如何在kotlin中使用@Autowired之类的spring注解?

kotlin - Kotlin 协程如何比 RxKotlin 更好?

list - 如何在 Kotlin 中初始化 List

database - Android Room Persistence 库和 Kotlin

kotlin - Kotlin 中的 "receiver"是什么?

lambda - 传递 lambda 而不是接口(interface)

kotlin - 函数中Unit-return的目的是什么

kotlin - 如何在 Kotlin 中同时捕获多个异常?

kotlin - 有什么作用? : do in Kotlin?(猫王运算符)

java - Android 动画 Alpha