1. 程式人生 > >多個地方同時向一個檔案讀寫的互斥問題解決方案

多個地方同時向一個檔案讀寫的互斥問題解決方案

場景:多個地方同時向一個檔案讀寫據,如何保持操作互斥性,即一次只能一個操作(比如讀或寫)進行。

我們希望在一個執行緒在操作某個檔案的時候,其他執行緒不能對該檔案進行讀或寫操作,要怎麼才能實現呢?利用java提供的synchronized似乎無法完成,因為每個執行緒是在程式中動態丟擲的.鬱昧了一天之後,我終於找到了一個解決辦法,就是利用java.nio包中的FileChannel對檔案進行加鎖.

具體實現方法如下:

1.寫檔案的執行緒

 

2.讀檔案的執行緒

 

3.分別啟用兩個執行緒

 

4.結果分析

以上程式在對一個檔案執行寫操作前,先對該檔案加鎖,這樣其他執行緒就不能再對該檔案操作,等該執行緒的寫操作結束,釋放資源,其他執行緒才可以繼續對該檔案執行相應的讀寫操作.

可是,鬱昧的是,這段程式在windows下可以正確執行,在linux下卻無效.根據<Thinking in Java>上的觀點是:對獨佔鎖或者共享鎖的支援必須由底層的作業系統提供。