檔案鎖看似簡單,但是在 android 使用卻遇到重重問題,幾經嘗試終於得出正解:
先看如何獲取檔案鎖:
filechannel.trylock()
要想獲得檔案鎖,先開啟檔案通道,通道可以來自幾處,我嘗試過3處:
1.randomaccessfile
檔案若不存在會自己建立,結果發現通過其獲取的檔案鎖鎖住某個檔案後,在另外乙個執行緒中任然可以獲取該檔案鎖,具體原因不詳
2.fileinputstream
檔案若不存在,拋異常,其獲取的 通道是唯讀的,不用用於獲取檔案鎖
3.fileoutputstream
獲取檔案鎖正常,多執行緒測試正常
/**
* 占用某個檔案鎖
* * @param file
* @return
*/public static filelock tryfilelock(file file)
} catch (exception e)
return null; }
public static void freefilelock(filelock fl, file file) catch (ioexception e)
}
樓主剛剛搞錯了,其實 android 中 filelock 只支援程序間死鎖,同一程序不同執行緒是無效的, 但是 windows 中線程間也可以鎖住,看官方解釋這個介面的實現依賴平台!
Android 配置檔案鎖設定
本文內容 何時該使用讀寫鎖.讀寫鎖的寫法.理解讀寫鎖和執行緒互斥的區別。複習 同步化的概念 當乙個方法或 塊被宣告成synchronized,要執行此 必須先取得乙個物件例項或this的鎖定,這個鎖定要在 synchronized修飾的方法或 塊執行完後才能釋放掉 無論這段 是怎樣返回的,是正常執行...
Android方向研究
目前android的發展正處於高速的時期,也是暴利的時期,混亂的時期,搶占地盤的時期。蘋果的iphone和ipad的成功,給了我們無限的幻想,而恰恰google的android給所有崇拜蘋果但有覺得遙不可及的人們看到了希望。全球的消費電子廠商無不蜂擁而上,一時風起雲湧,硝煙四起,誰站的最高看得最遠,...
ORACLE鎖機制研究
資料庫是乙個多使用者使用的共享資源。當多個使用者併發地訪問資料時,在資料庫中就會產生多個事務同時訪問同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。加鎖是實現資料庫併發控制的乙個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖...