2015-05-08 110 views
2

我想分析多個文件以提取所需數據,然後將輸出寫入XML文件。我用Callable Interface來實現這個。我的同事要求我使用Java 8功能,可以輕鬆完成這項工作。我真的很困惑我們現在應該使用哪一個。並行化(Java 8)與併發(Java 7)

list.parallelStream().forEach(a -> { 
      System.out.println(a); 
     }); 
+0

你可以發佈你的'Callable'的代碼嗎? –

+4

使用並行流不知道它的優缺點沒有任何意義,IMO。 –

+0

看起來像您的XML的結果輸出順序可能會與並行處理有點不確定。 – Thilo

回答

4

使用併發性或並行流只有在您有獨立的任務需要處理時纔會有所幫助。一個很好的例子是什麼時候你不會這樣做,就是你鎖定共享資源,例如

// makes no sense to use parallel here. 
list.parallelStream().forEach(a -> { 
     // locks System.out so only one thread at a time can do any work. 
     System.out.println(a); 
    }); 

然而,作爲一般的問題,我會用parallelStream用於處理數據,而不是併發庫直接因爲;

  • 功能風格的編碼阻止共享可變狀態。 (實際上,在函數式編程中,不應該有一個可變狀態,但Java並不是真正的函數式語言)
  • 編寫和理解處理數據更容易。
  • 測試使用並行是否有幫助更容易。很可能ti不會,你可以很容易地將它改回到串行。

恕我直言鑑於使用並行編碼確實會有所幫助的機會很低,parallelStream的最佳功能並不是增加多麼簡單,而是多麼簡單。

如果您有難以建模爲數據流的臨時工作,併發庫會更好。例如用於客戶端請求的工作池可能更簡單,可以使用ExecutorService實現。

+0

謝謝你的回答。我會用parallelStream去。 – user3136136

+0

@ user3136136嘗試它,如果它沒有幫助,請將其切換回流。 –