【问题标题】:What does "compose" mean in the context of concurrency?在并发上下文中“组合”是什么意思?
【发布时间】:2017-10-18 16:34:15
【问题描述】:

来自 Scott 的 Programming Language Pragmatics

正确性取决于锁定顺序这一事实意味着基于锁定的程序片段不会组合:我们不能采用现有的基于锁定的抽象并从新的临界区安全地调用它们。 p>

“作曲”是什么意思?

为什么基于锁的程序片段不组合?

来自Transform Java Future into a CompletableFuture

Java 8 引入了 CompletableFuture,它是 Future 的一个新实现,可组合(包括一堆 thenXxx 方法)。我想专门使用它,但我想使用的许多库只返回不可组合未来实例。

有些未来实例是可组合的,有些则不是,这是什么意思?

谢谢。

【问题讨论】:

  • 这意味着组合/排列部分以创造新的东西。
  • 谢谢。你能告诉我这是如何在代码中完成的,或者指出这些例子吗?

标签: java concurrency synchronization locking future


【解决方案1】:

对于第一部分,任何基于锁的东西都不是微不足道的。至少,为了避免死锁,您必须定义一个锁顺序并在任何地方使用它。此外,锁的获取时间应该非常短,因此您应该避免锁定可能阻塞的代码,例如长时间运行的操作或等待 I/O。

对于第二部分,Future<V> 接口的组合不好,因为知道它何时完成的唯一方法是通过轮询或阻塞(isDone()get())。您无法通过其他方式收到Future<V> 完成的通知。

有一些特定的futures很容易组合,例如CompletableFuture<V>,它允许你被通知而不是轮询或阻塞。

但是,如果您将其中之一作为Future<V>,您将无法利用其通知机制。您可以尝试投射到包含组合方法的CompletionStage<V> 接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多