採用了乙個核心類:org.apache.commons.io.output.lockablefilewriter
該類在例項化的時候會在臨時資料夾建立乙個lock檔案,close的時候刪除該lock檔案。
根據這個lock的存在與否來判斷目標檔案是否被鎖定。
如果目標檔案使用中,那麼建立lock檔案會丟擲異常。
拿鎖的**:
//如果檔案被鎖,那麼就持續的嘗試拿鎖60秒
lockablefilewriter writer = null;
int step = 0;
while(null == writer && step < 60) catch (ioexception e) catch (interruptedexception e1)
step++;}}
if(null == writer)
釋放鎖的**
try catch (ioexception e)
如果不想開啟檔案,但是又想鎖定檔案,不讓lockablefilewriter 用。那麼只好直接操作那個lock檔案了。
//拿鎖
string destfile = ***xx.txt;
file lockfile = null;
boolean islockcreated = false;
int step = 0;
while(islockcreated == false && step < 60) catch (interruptedexception e)
}} catch (ioexception e) catch (interruptedexception e1)
logger.error(e);
}step++;
}if(false == islockcreated || null == lockfile)
/*業務操作*/
//放鎖
lockfile.deleteonexit();
怎樣在不同執行緒間實現對檔案的同步操作
採用了乙個核心類 org.apache.commons.io.output.lockablefilewriter 該類在例項化的時候會在臨時資料夾建立乙個lock檔案,close的時候刪除該lock檔案。根據這個lock的存在與否來判斷目標檔案是否被鎖定。如果目標檔案使用中,那麼建立lock檔案會丟...
不同執行緒間的等待喚醒機制
具體來說是執行緒間的通訊問題 表示為 student 資源 setthread 生產線程以及getthread 消費執行緒。void wait 執行緒等待 void notify 喚醒等待的單個執行緒 生產線程生產好資源後,通知消費執行緒消費,與此同時再次和消費爭搶時間片,但是此時標記為true,表...
目錄間複製檔案的執行緒實現
普通方案 private void button1 click object sender,eventargs e this.label1.text 複製完成,共手複製檔案 files.length.tostring 個 你的邏輯類 public class fileoperator 下面是多執行緒...