怎樣在不同執行緒間實現對檔案的同步操作

2021-09-12 04:38:16 字數 1026 閱讀 3138

採用了乙個核心類: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 下面是多執行緒...