来自编程语言语用学,由Scott
正确性取决于锁定顺序这一事实意味着基于锁定的程序片段不会撰写:我们无法接受现有的基于锁的抽象并在新的关键部分内安全地调用它们。
“撰写”是什么意思?
为什么基于锁的程序片段不构成?
来自Transform Java Future into a CompletableFuture
Java 8引入了CompletableFuture,这是Future的一个新实现,可组合(包括一堆thenXxx方法)。我想独占使用它,但我想使用的许多库只返回不可组合的Future实例。
一些未来的实例是可组合的,有些则不是?
感谢。
答案 0 :(得分:0)
对于第一部分,任何基于锁定的东西都不是无关紧要的。至少,为了避免死锁,您必须定义一个锁定顺序并在任何地方使用它。此外,应该在很短的时间内获取锁定,因此您应该避免锁定可能阻塞的代码,例如长时间运行的操作或等待I / O.
对于第二部分,Future<V>
界面不能很好地构成,因为知道它何时完成的唯一方法是通过轮询或阻止(isDone()
和get()
)。您没有其他方式可以获得Future<V>
完成情况的通知。
有一些特定的期货可以很容易地构成,例如CompletableFuture<V>
,它允许您通知而不是轮询或阻止。
但是,如果您将其中一个作为Future<V>
获得,则您无法利用其通知机制。您可以尝试转换为CompletionStage<V>
接口,其中包含合成方法。