为什么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
包中的任何东西,比如ConcurrentHashMap
,CountdownLatch
,CyclicBarrier
,Semaphore
… - 您可以访问
java.util.concurrent.locks
包中的任何内容,并且Kotlin具有其中一些扩展,包括很酷的withLock()
扩展函数以及ReentrantReadWriteLock
类似read
/write
扩展 。 - 你可以访问
java.util.concurrent.atomic
包中的任何东西,比如AtomicReference
,AtomicLong
,… - 您可以使用
wait
并notify
对象
你拥有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(...) }