2017-10-18 291 views
1

与编程语言的语用学,由Scott“compose”在并发环境中意味着什么?

那正确性取决于锁定顺序,这意味着基于锁的程序片段不构成:我们不能把现有的基于锁的抽象和安全地从内调用它们一个新的关键部分。

“compose”是什么意思?

为什么基于锁的程序片段不构成?

Transform Java Future into a CompletableFuture

爪哇8引入CompletableFuture,一个新的实现未来的即可组合(包括一堆thenXxx方法)。我想单独使用它,但我想要使用的许多库仅返回非可组合未来实例。

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

谢谢。

+0

这意味着组合/安排部分来创造新的东西。 – shmosel

+0

谢谢。你能告诉我这是如何在代码中完成的,或者指向我这样的例子吗? – Ben

回答

1

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

对于第二部分,Future<V>接口不构成,因为知道何时完成的唯一方法是通过轮询或阻止(isDone()get())。您没有其他办法可以通知Future<V>的完成。

有一些具体的期货可以很容易地构成,如CompletableFuture<V>,它允许您通知而不是轮询或阻止。

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