我有5個引數化的執行緒,指向5個檔案夾,引數將是檔案夾的名稱。假設檔案夾名稱為 A、B、C、D 和 E。
每個檔案夾將有多個檔案,需要對其執行某些操作。
要對每個檔案夾下的所有檔案執行的操作將是相同的,即任務將是相同的。這整個事情需要持續運行,即它必須在一個時間表中。
我已經嘗試過的事情:
用多執行緒調度(即5個引數化的執行緒在同一個任務上作業)-> 但這將導致執行緒的重疊,因為任務是共同的,所需的輸出將不會被生成。
使用MultiTasking進行調度,即為每個檔案夾創建一個實作Runnable的單獨類,并為每個類使用executor.scheduleAtFixedRate。這將導致同步操作,這意味著在第一個檔案夾的操作還沒有結束之前,其他4個檔案夾的處理不會開始。我們不能在newScheduledThreadPool中增加corePoolSize,因為這將產生與第1點相同的重疊問題。
因此,我正在尋求幫助來解決這個問題,我的執行緒不會在底層任務上重疊。
場景2的虛擬代碼:
class FolderA implementsRunnable{
private final String fileName;
FolderA(String fileName){
this.fileName=fileName。
}
。
public void run {
ScheduleJob.internalRun(fileName)。
}
}
class FolderB implements Runnable{.}。
class FolderC implements Runnable{...}。
class FolderD implements Runnable{...}。
class FolderE implements Runnable{...}。
public class ScheduleJob{。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1)。
FolderA folderA = new FolderA("folderA") 。
executor.scheduleAtFixedRate(folderA, 60,60, TimeUnit.SECONDS)。
FolderB folderB = new FolderB("folderB") 。
executor.scheduleAtFixedRate(folderB, 60,60, TimeUnit.SECONDS)。
--同樣的for檔案夾C D和E
public static void insideRun(String folderName){
//包含對需要的各種操作的呼叫。
對檔案夾A、B、C、D和E中的每個檔案進行操作。
操作順序。讀取、處理、寫入 對每個檔案的操作。
}
}
uj5u.com熱心網友回復:
你的問題并不明確,但我猜測你希望對一個檔案夾中的檔案的處理不妨礙或阻止對其他檔案夾中檔案的處理。
多個ExecutorService物件
。
創建一個以上的ExecutorService物件。每個執行者服務都專注于一個檔案夾。如果你有五個檔案夾,就有五個執行者服務,每個檔案夾一個執行者服務。
如果你希望每個檔案夾一次只處理一個檔案,那么請讓每個執行器服務成為單執行緒的。
定義你的任務(你的 Runnable 或 Callable)為接受一個引數,指出要處理哪個檔案夾。
public void FileProcessor implements Runnable
{
//構造器
public FileProcessor( Path path ) { ... }。
//實作`Runnable`。
@Override
public void run() { ... }
}
定義你的檔案夾。
List< Path > folders = List.of( pathToA, pathToB, ... ) 。
將這些資訊反饋給執行器服務的構造器。
List< ExecutorService > executorServices = new ArrayList<> () 。
for( Path folder : folders )
{
ExecutorService es = Executors.newSingleThreadExecutor() ;
executorServices.add( es ) 。
es.submit( new FileProcessor( folder ) ) 。
}
然后使用該集合executorServices來優雅地關閉所有的執行器服務。
對于預定的執行器服務,同樣的想法。將型別從ExecutorService改為ScheduledExecutorService。呼叫Executors.newSingleThreadScheduledExecutor。將submit方法改為計劃方法之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308326.html
標籤:
上一篇:<p>我花了很長時間進入VB.NET,并通過MySQL&獲得了一個程式,令人驚訝的是,它通過登錄對話框驗證了bcrypt哈希值。所有的作業都非常出色。</p> <p
