为什么 Kotlin 中没有并发关键字?
Why there are no concurrency keywords in Kotlin?
为什么 synchronization/concurrency 没有关键字?
到目前为止,我的研究给了我一个解决方案,你包装一些高级 类 并使用它们来处理并发。
给定一个纯 Kotlin 项目,如果需要一个高度优化的小型组件来处理并发等,该怎么办?
我的印象是,Kotlin 是 Java 的辅助语言,90% 的代码都用 Kotlin 编写,但有一些 java 代码无法用 Kotlin 表达。
这样对吗?这就是它的本意吗?
Kotlin 1.1 with Coroutines was released and it brings with it async..await
! Read more about it in Kotlin reference docs, Kotlinx Coroutines library and this great in depth Couroutines by Example
在 Kotlin 协程之外,您有以下选择:
- Kovenant library 将 Promise 添加到 Kotlin
- Quasar library 提供轻量级线程和延续
@Synchronized
and @Volatile
注释直接映射到 Java 中的相同关键字
synchronized
blocks 在 Kotlin 中来自内联函数 synchronized()
.
- Kotlin 有一个
Kotlin.concurrent
package and extensions 具有新功能和对 JDK 类 的扩展。
- 您可以访问
java.util.concurrent
package 中的任何内容,例如 ConcurrentHashMap
、CountdownLatch
、CyclicBarrier
、Semaphore
、...
- 您可以访问
ReentrantReadWriteLock
的 java.util.concurrent.locks
package and Kotlin has extensions for a few of these including the cool withLock()
extension function and similar read
/write
extensions 中的任何内容。
- 您可以访问
java.util.concurrent.atomic
package 中的任何内容,例如 AtomicReference
、AtomicLong
、...
- 你可以使用
wait
and notify
on objects
您拥有 Java 拥有的一切,甚至更多。你的短语"synchronization and locks"满足上面的列表,然后你有更多而且没有语言变化。任何语言特性只会让它更漂亮。
因此,您可以拥有 100% 的 Kotlin 代码,使用小型 Kotlin 运行时、来自 JDK 的 JVM 运行时,以及您想要使用的任何其他 JVM 库。不需要 Java 代码,只需要 Java(在 JVM 中)库。
一些功能的快速示例:
class SomethingSyncd {
@Synchronized fun syncFoo() {
}
val myLock = Any()
fun foo() {
synchronized(myLock) {
// ... code
}
}
@Volatile var thing = mapOf(...)
}
我会回答我自己的问题,因为我的问题的实际答案在 kotlin 讨论的某个深处。
当时 Java 让我感到困惑的是,并发关键字不是语言关键字,它们是注释?对我来说,像同步这样的重要概念是通过注释来处理的,这似乎很奇怪,但现在它完全有意义了。 Kotlin 正朝着成为平台无关语言的方向发展,它不仅适用于 JVM,而且几乎适用于任何东西。因此 synchronized 和 volatile 是 JVM 特有的,例如 javascript 中可能不需要它们。
简而言之,Kotlin 拥有 Java 拥有的一切(包可见性除外),还有更多其他语言所没有的巨大差异是协程。但是在 Java 中没有什么是你在 Kotlin 中不能做的......(据我所知)
为什么 synchronization/concurrency 没有关键字?
到目前为止,我的研究给了我一个解决方案,你包装一些高级 类 并使用它们来处理并发。
给定一个纯 Kotlin 项目,如果需要一个高度优化的小型组件来处理并发等,该怎么办?
我的印象是,Kotlin 是 Java 的辅助语言,90% 的代码都用 Kotlin 编写,但有一些 java 代码无法用 Kotlin 表达。
这样对吗?这就是它的本意吗?
Kotlin 1.1 with Coroutines was released and it brings with it async..await
! Read more about it in Kotlin reference docs, Kotlinx Coroutines library and this great in depth Couroutines by Example
在 Kotlin 协程之外,您有以下选择:
- Kovenant library 将 Promise 添加到 Kotlin
- Quasar library 提供轻量级线程和延续
@Synchronized
and@Volatile
注释直接映射到 Java 中的相同关键字
synchronized
blocks 在 Kotlin 中来自内联函数synchronized()
.- Kotlin 有一个
Kotlin.concurrent
package and extensions 具有新功能和对 JDK 类 的扩展。 - 您可以访问
java.util.concurrent
package 中的任何内容,例如ConcurrentHashMap
、CountdownLatch
、CyclicBarrier
、Semaphore
、... - 您可以访问
ReentrantReadWriteLock
的java.util.concurrent.locks
package and Kotlin has extensions for a few of these including the coolwithLock()
extension function and similarread
/write
extensions 中的任何内容。 - 您可以访问
java.util.concurrent.atomic
package 中的任何内容,例如AtomicReference
、AtomicLong
、... - 你可以使用
wait
andnotify
on objects
您拥有 Java 拥有的一切,甚至更多。你的短语"synchronization and locks"满足上面的列表,然后你有更多而且没有语言变化。任何语言特性只会让它更漂亮。
因此,您可以拥有 100% 的 Kotlin 代码,使用小型 Kotlin 运行时、来自 JDK 的 JVM 运行时,以及您想要使用的任何其他 JVM 库。不需要 Java 代码,只需要 Java(在 JVM 中)库。
一些功能的快速示例:
class SomethingSyncd {
@Synchronized fun syncFoo() {
}
val myLock = Any()
fun foo() {
synchronized(myLock) {
// ... code
}
}
@Volatile var thing = mapOf(...)
}
我会回答我自己的问题,因为我的问题的实际答案在 kotlin 讨论的某个深处。
当时 Java 让我感到困惑的是,并发关键字不是语言关键字,它们是注释?对我来说,像同步这样的重要概念是通过注释来处理的,这似乎很奇怪,但现在它完全有意义了。 Kotlin 正朝着成为平台无关语言的方向发展,它不仅适用于 JVM,而且几乎适用于任何东西。因此 synchronized 和 volatile 是 JVM 特有的,例如 javascript 中可能不需要它们。
简而言之,Kotlin 拥有 Java 拥有的一切(包可见性除外),还有更多其他语言所没有的巨大差异是协程。但是在 Java 中没有什么是你在 Kotlin 中不能做的......(据我所知)