vac*_*ach 61 java concurrency kotlin
我只是潜入这种神奇的语言,这一件事让我感到沮丧.为什么没有用于同步的关键字?
到目前为止,我的研究放弃了一个解决方案,你包装一些高级类并使用它们来处理并发...
给定一个关于纯kotlin的项目,如果需要一个处理并发性等的小型高度优化组件,那么该怎么办...我的印象是kotlin是Java的一种辅助语言,在kotlin中编写90%的代码但是有一些用kotlin无法表达的java代码.
这是正确的吗?这是它的目的是什么?
Jay*_*ard 119
带有Coroutines的Kotlin 1.1已经发布,它带来了它async..await
!在Kotlin参考文档,Kotlinx Coroutines库中了解更多相关信息,并通过示例深入了解Couroutines
在Kotlin Coroutines之外,您有以下选择:
@Synchronized
和@Volatile
注释直接映射到Java中的相同关键字synchronized
Kotlin中的块来自内联函数synchronized()
.Kotlin.concurrent
包和扩展,包含新功能和JDK类的扩展.java.util.concurrent
包装,例如ConcurrentHashMap
,CountdownLatch
,CyclicBarrier
,Semaphore
,...java.util.concurrent.locks
包装和科特林有少数的这些扩展包括酷withLock()
扩展功能和类似的read
/ write
扩展的ReentrantReadWriteLock
.java.util.concurrent.atomic
包装,例如AtomicReference
,AtomicLong
,...wait
和notify
对象你拥有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(...)
}
Run Code Online (Sandbox Code Playgroud)
我会回答我自己的问题,因为我的问题的实际答案是在 kotlin 讨论的深处。
当时来自 Java 的让我感到困惑的是,并发关键字不是它们是注释的语言关键字?对我来说,像同步这样的重要概念是通过注释处理的,这似乎很奇怪,但现在它完全有道理了。Kotlin 正朝着成为一种平台无关语言的方向发展,它不仅适用于 JVM,而且几乎适用于任何东西。因此 synchronized 和 volatile 非常特定于 JVM,例如在 javascript 中可能不需要它们。
简而言之,Kotlin 拥有 Java 所拥有的一切(包可见性除外),还有更多其他语言所没有的巨大差异是协程。但是没有什么是你可以用 Java 写的,而你在 Kotlin 中是做不到的......(据我所知)
归档时间: |
|
查看次数: |
29600 次 |
最近记录: |