2017-10-18 235 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>界面。