閱讀127 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java IO: 並發IO

有時候你可能需要並發地處理輸入和輸出。換句話說,你可能有超過一個線程處理輸入和產生輸出。比如,你有一個程序需要處理磁盤上的大量文件,這個任務可以通過並發操作提高性能。又比如,你有一個web服務器或者聊天服務器,接收許多連接和請求,這些任務都可以通過並發獲得性能的提升。

如果你需要並發處理IO,這裏有幾個問題可能需要注意一下:

在同一時刻不能有多個線程同時從InputStream或者Reader中讀取數據,也不能同時往OutputStream或者Writer裏寫數據。你沒有辦法保證每個線程讀取多少數據,以及多個線程寫數據時的順序。

如果線程之間能夠保證操作的順序,它們可以使用同一個stream、reader、writer。比如,你有一個線程判斷當前的輸入流來自哪種類型的請求,然後將流數據傳遞給其他合適的線程做後續處理。當有序存取流、reader、writer時,這種做法是可行的。請注意,在線程之間傳遞流數據的代碼應當是同步的。

注意:在Java NIO中,你可以讓一個線程讀寫多個“channel”。比如,你有很多網絡連接處於開啟狀態,但是每個連接中都隻有少量數據,類似於聊天服務器,可以讓一個線程監視多個頻道(連接)。Java NIO是另一個話題了,會後續教程中介紹。

最後更新:2017-05-23 14:02:18

  上一篇:go  用自然語言教育人工智能:百度新算法發展出zero-shot學習能力
  下一篇:go  《Java特種兵》1.8 老A是在逆境中迎難而上者