当前位置: 首页 > 知识库问答 >
问题:

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

樊琦
2023-03-14

这样对吗?这就是它的初衷吗?

共有1个答案

洪弘壮
2023-03-14

带有Coroutines的Kotlin 1.1已经发布,并附带了async.await!在Kotlin参考文档、Kotlinx Coroutines库和这一伟大的深度Couroutines示例中阅读更多关于它的内容

除了Kotlin Coroutines之外,您还有以下选项:

  • Kovenant库为Kotlin添加promise
  • 类星体库提供轻量级线程和连续
  • @synchronized@volatile注释,它们直接映射到Java中的相同关键字
  • synchronized块在Kotlin中来自内联函数synchronized()
  • Kotlin有一个kotlin.concurrent包和带有新函数的扩展,以及对JDK类的扩展。
  • 您可以访问java.util.concurrent包中的任何内容,例如ConcurrentHashMapCountDownLatchCyclicBarrierSemaphore、...
  • 您可以访问java.util.concurrent.locks包中的任何内容,Kotlin对其中的一些内容进行了扩展,包括酷的WithLock()扩展函数和类似的Read/Write扩展。
  • 您可以访问java.util.concurrent.atomator包中的任何内容,例如AtomicReferenceAtomicLong、...
  • 可以在对象上使用等待通知

您拥有Java所拥有的一切,甚至更多。你的短语“同步和锁”被上面的列表所满足,然后你有更多的而且没有语言变化。任何语言特性只会使它更漂亮一点。

因此您可以使用小型Kotlin运行时、JDK中的JVM运行时以及您想要使用的任何其他JVM库,拥有100%的Kotlin代码。不需要Java代码,只需要Java(在JVM中一样)库。

一些特性的快速示例:

class SomethingSyncd {
    @Synchronized fun syncFoo() {

    }

    val myLock = Any()

    fun foo() {
        synchronized(myLock) {
            // ... code
        }
    }

    @Volatile var thing = mapOf(...)
}
 类似资料:
  • 问题内容: 为什么没有用于同步/并发的关键字? 到目前为止,我的研究为我提供了一种解决方案,您包装了一些高级类并使用它们来处理并发。 给定一个纯Kotlin项目,如果需要一个小型的高度优化的组件来处理并发等,该怎么办? 我的印象是Kotlin是Java的辅助语言,可以用Kotlin编写90%的代码,但有一些Java语言无法用Kotlin表示。 这是正确的吗?这是原来的样子吗? 问题答案: Kotl

  • 为什么没有同步和并发的关键字? 到目前为止,我的研究给了我一个解决方案,你包装一些高级类,并用它们来处理并发。 给定一个纯Kotlin的项目,如果需要一个以线程安全方式处理并发的小型、高度优化的组件,应该怎么做? 我的印象是,Kotlin是Java的一种辅助语言,可以用Kotlin编写90%的代码,但有一些Java代码无法用Kotling表达。 这是对的吗?这就是它的目的吗?

  • 我仍然在考虑Kotlin中的coroutines,但我想知道这是否对我的问题有些矫枉过正,即在返回数据时立即更新文本视图。异常处理使回调变得非常丑陋,我想尽可能避免这些 suspend关键字是否仅仅意味着运行库可能会挂起一个需要一段时间才能完成的函数?还是只在coroutine内启用挂起?作为一个假设,我能写吗 是否知道,如果下载了1 GB的数据,将同时调用,而则等待由填充?

  • 我在Android应用程序中使用coroutines时遇到了一些意想不到的行为。 假设我得到了下面的函数,它不是“suspend”。它启动辅助线程,并应该阻止调用线程,直到所有辅助线程终止: 我知道很难看,使用ReentrantLock会更好,但我有意想降低到最原始的级别。 现在,如果我在没有来自Android主线程的coroutine的情况下执行此函数,它将阻塞调用线程(预期行为): 但是,如果

  • 在为android开发时,我有时会遇到类似这样的事情: 我不明白关键字有什么意义。

  • 假设我们有这样一门课: 我们都知道,比:如果通过重构或模糊处理更改的名称,它仍然有效。 但是,没有办法用领域和方法获得这种优势。您是否曾经希望您可以这样做:(请参阅下面的编辑中提出的更好的语法!) 而不是这个? 所以我的问题是:有人知道这项功能是否已经计划或讨论过,或者Sun/Oracle是否因为某种原因特别决定不使用它? 编辑:这个语法怎么样?它避免了人们提到的问题: 示例用例 我最近创建了一个