我對Future
的用法有一些疑問。在處理我的查詢之前,請通過下面的示例。關於Java Future和RejectionHandler的查詢
http://javarevisited.blogspot.in/2015/01/how-to-use-future-and-futuretask-in-Java.html
- 使用線程池&
Executors
的主要目的是爲了不阻塞主線程異步執行任務。但是,一旦您使用Future
,它會阻止調用線程。我們是否必須創建單獨的新線程/線程池來分析Callable
任務的結果? OR還有其他什麼好的解決方案嗎? - 由於
Future
呼叫阻止了呼叫者,是否值得使用此功能?如果我想分析任務的結果,我可以進行同步呼叫,並檢查呼叫的結果,而不需要Future
。 - 使用
RejectionHandler
處理拒絕任務的最佳方式是什麼?如果任務被拒絕,將任務提交給另一個線程或線程池還是將同一任務再次提交到當前的ThreadPoolExecutor
是好習慣?
如果我的思維過程對此功能有誤,請糾正我。
期貨做*不*阻止調用線程。猜猜爲什麼在你鏈接的代碼示例中有一個*循環*?因爲'isDone'不*等待。雖然循環中的代碼示例輪詢isDone仍然是不好的編碼風格。如果你想等待,你可以使用'get',並且如果你不想讓調用者線程被阻塞,你可以[指定超時](http://docs.oracle.com/javase/8/docs/ api/java/util/concurrent/Future.html#get-long-java.util.concurrent.TimeUnit-) – Holger
查看[RejectedExecutionHandler',「All Known Implementing Classes」的文檔](http:// docs。 oracle.com/javase/8/docs/api/java/util/concurrent/RejectedExecutionHandler.html)以獲取處理策略的建議。 – Holger
有沒有來自Future的API在結果可用時得到通知,因爲超時並未完全達到目的?如果不可用,最好不要在調用者線程本身中同步使用Future並執行任務? –