[英]using java FileChannel FileLock to prevent file writes but allow reads
[英]Java Filelock to prevent multiple writes by multiple JVM processes not working
我正在學習 FileOperations,並且正在編寫一個程序來在 linux 機器上實現 FileLocking。
該程序的目的是,如果多人調用該程序,則該實例應獲取文件鎖(類似於 linux 系統上的flock )。
我通過從兩個不同的終端運行類文件來嘗試我的程序是否正常工作。 但是,它每次都返回true,也就是說,即使第一個進程運行並且沒有釋放鎖,第二個進程也能夠獲取鎖。
我的代碼是
public boolean getLock() throws FileNotFoundException, IOException{
File lockFile = new File(conf_file);
System.out.println("Attempting to aquire"
+ " exclusive lock on " + conf_file);
RandomAccessFile f = new RandomAccessFile(lockFile, "rw");
FileChannel channel = f.getChannel();
FileLock lock;
lock = channel.lock();
if(lock != null && lock.isValid()){
f.close();
return true;
}
else{
f.close();
return false;
}
}
我在這里做錯了什么?
刪除f.close()
方法,它應該可以工作。 要刪除評論中的警告,請將這些變量聲明為實例變量,並在可能的另一種方法中執行 f.close ,例如removeLock()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.