導航:首頁 > 編程語言 > java方法加鎖

java方法加鎖

發布時間:2025-01-02 08:20:48

1. java中文件加鎖機制是怎麼實現的。

Java中文件加鎖機制如下:
在對文件操作過程中,有時候需要對文件進行加鎖操作,防止其他線程訪問該文件。對文件的加鎖方法有兩種:
第一種方法:使用RandomAccessFile類操作文件。
在java.io.RandomAccessFile類的open方法,提供了參數實現獨占的方式打開文件:
RandomAccessFile raf = new RandomAccessFile(file, "rws");
其中的「rws」參數,rw代表讀取和寫入,s代表了同步方式,也就是同步鎖。這種方式打開的文件,就是獨占方式的。

第二種方法:使用sun.nio.FileChannel對文件進行加鎖。
代碼:
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
FileChannel fc = raf.getChannel();
FileLock fl = fc.tryLock();
if(fl.isValid())
System.out.println("You have got the file lock.");

以上是通過RandomAccessFile來獲得文件鎖的,方法如下:
代碼:
FileOutputStream fos = new FileOutputStream("file.txt");
FileChannel fc = fos.getChannel(); //獲取FileChannel對象
FileLock fl = fc.tryLock(); //or fc.lock();
if(null != fl)
System.out.println("You have got file lock.");
//TODO write content to file
//TODO write end, should release this lock
fl.release(); //釋放文件鎖
fos.close; //關閉文件寫操作

如果在讀文件操作的時候,對文件進行加鎖,操作過程如下:
FileChannel也可以從FileInputStream中直接獲得,但是這種直接獲得FileChannel的對象直接去操作FileLock會報異常NonWritableChannelException,需要自己去實現getChannel方法,代碼如下:
private static FileChannel getChannel(FileInputStream fin, FileDescriptor fd) {
FileChannel channel = null;
synchronized(fin){
channel = FileChannelImpl.open(fd, true, true, fin);
return channel;
}
}

其實,看FileInputStream時,發現getChannel方法與我們寫的代碼只有一個地方不同,即open方法的第三個參數不同,如果設置為false,就不能鎖住文件了。預設的getChannel方法,就是false,因此,不能鎖住文件。

2. java是不是同步方法會自動加this鎖,靜態同步代碼(名字可能不對)會自動加「名.class」鎖

//看注釋!
classTestLock
{
//非靜態方法,默認鎖是this
synchronizedvoidshow1()
{

}
//非靜態方法,如果方法沒有鎖,裡面同步代碼塊!
voidshow2()
{
//這里可以填寫this,填什麼都可以,只要是唯一,對象,類,都可以!
synchronized(this)
{
//這個同步代碼塊,如果不和上面方法進行同鎖,填什麼都可以,包括class文件都可以
//但是為了和上面方法同步的話,就必須this了,因為方法的鎖此刻默認就是this!
}
} //靜態方法看這里!
staticsynchronizedvoidmethod1()
{
//注意這個同步方法的鎖,這會默認就不在是this了,而是(TestLock.class)了;
}
//靜態同步代碼塊!
staticvoidmethod2()
{
synchronized(TestLock.class)
{
//這里建議這么寫,該方法所屬的class文件,當然,寫其他類的位元組碼文件也是可以的!
//但是這里絕對不可以this
//如果和該上買呢靜態方法同步的話,必須TestLock.class
}
}
}

閱讀全文

與java方法加鎖相關的資料

熱點內容
智能管家如何與安卓互通 瀏覽:733
秒錶倒計時單片機程序 瀏覽:738
單片機小學期交通燈 瀏覽:591
如何查app文件在哪裡 瀏覽:65
美的美居app有什麼功能 瀏覽:410
安卓手機如何刷為華為系統 瀏覽:394
伺服器如何搭建自己的簡歷 瀏覽:580
編譯的程序名稱 瀏覽:630
安卓機如何使用蘋果同款鬧鍾 瀏覽:623
說文解字中華書局pdf 瀏覽:149
java反序列化xml 瀏覽:456
小藍app為什麼消息未連接 瀏覽:151
甲烷是不是可壓縮流體 瀏覽:366
別克車怎麼連接安卓手機投屏 瀏覽:566
負債凈值比率演算法 瀏覽:721
命令行窗口怎麼添加目錄 瀏覽:385
37的八位數源碼 瀏覽:932
空調壓縮機連接桿抱死 瀏覽:633
汽車空調壓縮機進了泥土怎麼辦 瀏覽:710
寧德有什麼好的買菜app 瀏覽:669