場景(JAVA/UNIX):
行程 A 將檔案寫入磁盤(使用 FileOutputStream)
行程 B 嘗試在行程 A 仍在寫入時讀取同一個檔案(使用 FileInputStream)
問題:
- 即使行程 B 嘗試讀取,行程 A 是否能夠成功地將檔案寫入磁盤?
- 行程 B 會發生什么?檔案被鎖定了嗎?是否拋出了 IOException?或者它可以讀取不完整的檔案嗎?
uj5u.com熱心網友回復:
- 即使行程 B 嘗試讀取,行程 A 能否成功將檔案寫入磁盤?
是的。它將能夠正確寫入檔案。在 Linux 上,讀取不會干擾寫入...。
- 行程 B 會發生什么?檔案被鎖定了嗎?是否拋出了 IOException?或者它可以讀取不完整的檔案嗎?
它可能會看到一個不完整的檔案。(它可能會看到一個完整的檔案......如果你幸運的話。)
Linux 默認不鎖定檔案。為了獲得鎖定,讀者和作者都需要進行flock(2)系統呼叫。在 Java 中映射到使用FileLock.
IOException在 UNIX / Linux / MacOS 上不會拋出Java 。(或在 Android 上。)您只會在 Windows 上遇到鎖定問題。
任何提示表示贊賞。
提示:您可以撰寫一個小測驗程式并嘗試一下....
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352792.html
下一篇:如何模擬可選的自動裝配欄位
