Java 中的流是表示為數據管道的對象序列。它通常具有數據所在的源和傳輸的目的地。請注意,流不是存儲庫;相反,它對數據源(例如數組或集合)進行操作。段落中的中間位實際上稱為流。想對Java 有更深入的了解,可以參加java培訓,在專業老師的指導下,你可以很快掌握java的更多特性。
在傳輸過程中,流通常會經歷一種或多種可能的轉換,例如過濾或排序,也可以是對數據進行操作的任何其他過程。這通常根據程序員的需要將原始數據定制為不同的形式。因此,根據對其應用的操作創建一個新流。例如,當對流進行排序時,它會產生一個新流,該流會產生一個結果,然后再對其進行排序。這意味著新數據是原始數據的轉換副本,而不是原始形式。
順序流
除非明確指定為并行,否則 Java 中的任何流操作都是按順序處理的。它們基本上是使用單個線程處理其管道的非并行流。即使底層系統可能支持并行執行,順序流也永遠不會利用多核系統。例如,當我們應用多線程處理流時會發生什么?即便如此,它一次只能在一個內核上運行。但是,除非明確固定到特定的核心,否則它可能會從一個核心跳到另一個核心。例如,四個不同線程與四個不同內核的處理顯然是不同的,前者與后者不匹配。在單核環境中執行多個線程是完全可能的,但并行處理完全是一種不同的類型。除了在支持它的環境中執行之外,還需要為并行編程設計一個程序。這就是并行編程是一個復雜領域的原因。在java培訓中,培訓課程不僅注重理論,更注重項目的實戰能力,能夠讓你快速適應企業開發的進度,成為企業所需要的Java人才。
并行流
使用并行流的主要動機是使流處理成為并行編程的一部分,即使整個程序可能沒有并行化。并行流利用多核處理器,從而顯著提高性能。與任何并行編程不同,它們復雜且容易出錯。但是,Java 流庫提供了以可靠的方式輕松完成此操作的能力。整個程序可能不會并行化。但至少處理流的部分可以并行化。從某種意義上說,它們實際上非常簡單,我們可以調用一些方法,其余的都可以處理。有幾種方法可以做到這一點。一種這樣的方法是通過調用 Collection 定義的 parallelStream() 方法來獲取并行流。另一種方法是在順序流上調用 BaseStream 定義的 parallel() 方法。順序流由調用并行化。請注意,底層平臺必須支持并行編程,例如多核系統。否則,調用沒有意義。在這種情況下,流將按順序處理,即使我們已經進行了調用。如果調用是在已經并行的流上進行的,它什么也不做,只是簡單地返回流。
為了保證對流應用并行處理的結果與通過順序處理得到的結果相同,并行流必須是無狀態的、無干擾的和關聯的。
結論
流 API 長期以來一直是 Java 的一部分,但是添加并行處理的調整非常受歡迎,同時也是一個非常有趣的特性。尤其如此,因為現代機器是多核的,并且并行編程設計很復雜是一個恥辱。Java 提供的 API 提供了在具有順序執行的整體設計的 Java 程序中加入一些并行編程調整的能力。這可能是此功能的最佳部分。通過java培訓的學習,你可以學到很多企業級項目經驗和技能,找到工作后,可以立馬上崗實操,大大提高開發效率。