我有以下的代碼部分:查找出來,如果線程仍在線程池
protected ExecutorService parallelExecutor = Executors.newCachedThreadPool();
protected ExecutorService serialExecutor = Executors.newSingleThreadExecutor();
List<?> parallelCommands = new ArrayList<?>();
List<?> serialCommands = new ArrayList<?>();
List<Future<Boolean>> results = null;
LocalDateTime timed = LocalDateTime.now().plusSeconds(60);
results = parallelExecutor.invokeAll(parallelCommands);
results.addAll(serialExecutor.invokeAll(serialCommands));
現在我想檢查是否都執行者完成一個超時時間內或者不是他們的工作:
while (LocalDateTime.now().isBefore(timed)) {
\\ here I need to check if meanwhile my threads finished
\\ if yes, break;}
我如何驗證執行者是否完成了他們的工作?
在期貨上調用'get'。成品將立即返回。 'get'也可以通過超時設置調用:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html#get-long-java.util.concurrent .TimeUnit- – Fildor
也許還有一種奇怪的方式,用CompleteableFuture做到這一點...... – Fildor