2016-08-29 159 views
0

鑑於鎳元素氮名單並行排序的任務執行者,我需要調用每個元素給定的方法:在Java中捕獲異常

process(element); 

處理每個列表中的所有鎳元素的秩序,一旦完成後,我必須知道哪些元素已處理,哪些已拋出異常。

是否有任何已執行的執行程序可以獲取任務列表,將按順序處理它們並記錄故障?

+0

儘管這不是你在尋找什麼,但你可以查看ExecutorService的invokeAll()方法。 –

+0

*'爲了'*是什麼意思?是否有可能開始處理新的列表,而前一個尚未完全處理?如果以前的項目尚未處理,是否有可能開始處理列表的新項目? –

回答

1

簡短的回答是否定的。

龍答:沒有,因爲它在不到20行代碼輕鬆實現:

public static void main(String[] args) { 


    List<Integer> elements = Arrays.asList(1, 2, 3, 5, 8, 13); 
    ExecutorService executor = Executors.newSingleThreadExecutor(); 

    List<Future<Integer>> results = elements.stream().map((e) -> { 

     return executor.submit(() -> { 
      // Fail for even numbers 
      if (e % 2 == 0) { 
       throw new RuntimeException(); 
      } 

      return e; 
     }); 

    }).collect(Collectors.toList()); 

    results.forEach((e) -> { 
     try { 
      System.out.println(e.get()); 
     } catch (InterruptedException | ExecutionException e1) { 
      System.out.println(false); 
     } 
    }); 
} 

將輸出:

1 
false 
3 
5 
false 
13