現在有兩個行程,同時監控一個目錄。每個行程做的事情一樣,具體處理如下:
1 掃描檔案夾,將掃描到的檔案名放到一個list中。
2 遍歷list,將檔案copy到另外一個目錄,每拷完一個就洗掉掉原來的。
現在要求每個檔案只能拷貝一次,也就是只能被一個行程執行。
所以用了filelock來實作這個功能。
for(。。。。){
lock = filelock.trylock();
if(lock == null){
continue;
}
}
但是測驗時發現,有的檔案居然被執行了兩遍,請問這是什么原因?猜測是由于要洗掉檔案導致的。如果是這個原因,要怎樣處理才好?
謝謝!
uj5u.com熱心網友回復:
既然你要只能被一個行程執行,那你的鎖就要鎖在整個行程塊的外面。
if (lock.tryLock()) {/*行程塊*/}
uj5u.com熱心網友回復:
你是兩個行程來操作,你的鎖是無法鎖住跨行程的資源的。你的鎖只能在行程內起作用。
你可以兩個行程 分片操作,比如行程1只處理檔案創建時間最后的秒是奇數的檔案。行程2只處理檔案創建時間最后的秒是偶數的檔案。
uj5u.com熱心網友回復:
還有人知道嗎?uj5u.com熱心網友回復:
https://blog.csdn.net/weixin_43476969/article/details/103991634可以參考下。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/231152.html
標籤:Java SE
