为什么没有同步和并发的关键字?
到目前为止,我的研究为我提供了一种解决方案,您可以包装一些高级类并使用它们来处理并发。
给定一个纯 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 协程之外,您还有以下选择:
@Synchronized
和 @Volatile
直接映射到 Java 中相同关键字的注解synchronized
blocks在 Kotlin 中,它来自一个内联函数 synchronized()
。Kotlin.concurrent
package and extensions具有新功能以及对 JDK 类的扩展。java.util.concurrent
package 中的任何内容如ConcurrentHashMap
、CountdownLatch
、CyclicBarrier
、Semaphore
、...java.util.concurrent.locks
package 中的任何内容Kotlin 有 extensions for a few of these包括酷withLock()
extension function和类似的read
/write
extensions对于 ReentrantReadWriteLock
。java.util.concurrent.atomic
package 中的任何内容如AtomicReference
、AtomicLong
、...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/