假設我有一個ForkJoinPool設置與並行度n的程度,那我叫並行計算是這樣的:ForkJoinPool和的Future.get
workpool.submit(
() -> {
objects.values().parallelStream().forEach(obj -> {
obj.foo();
});
});
我這樣做是爲了確保線程催生有創建在工作區內(我有需要隔離的系統的不同組件)。現在假設在這個被稱爲線程,也是本workpool內部執行,而我呢:
Future<?> wait = workpool.submit(
() -> {
objects.values().parallelStream().forEach(obj -> {
obj.foo();
});
});
wait.get()
1)我是不是堵在ForkJoinPool一個線程?如果我有n個線程全部阻塞未來,同時試圖在工作區中安排任務,這是否會導致死鎖?我不清楚ForkJoinPool中的「最大並行度」是否意味着(如果有n個非阻塞的任務),總會有n個線程執行,或者是否有固定數量的線程,無論是否有阻塞。如果我使用wait.join()而不是wait.join
(我不需要檢查異常,因爲在此代碼中引發的任何異常都已經生成了runtimeexception。如果我理解正確,join()將允許線程在等待時執行排隊的任務)
2)我仍然這樣做()獲得重量輕的優點forkjoin並行流的任務,如果我創建一個可運行的「包裝」類 - > {}
3)是否有任何(假設.join()確實實現了我認爲它的工作竊取行爲):
CompletableFuture.supplyAsync(this::mylambdafunction, workpool)
.thenAccept(this::mynextfunction);