[英]How to make org.apache.commons.io.monitor behave multi-threaded?
在我的 Java 微服務中,我覆蓋了 onFileCreate() function。此方法存在於內置庫 = org.apache.commons.io.monitor,class = FileAlterationListenerAdaptor,方法 = void File onFile() 我注意到即使創建了多個文件,也只有一個線程在監聽文件創建。 這意味着它一個一個地處理文件(同步),而不是同時處理多個文件。 我怎樣才能在這里實現多線程行為?
我不知道它是否相關,但我注意到這個內置庫中定義的一些方法是“同步的”。 我說的是class=FileAlterationMonitor, methods= setThreadFactory(), start(), stop() 。 是這個原因嗎? 如果是,我是否需要覆蓋所有這 3 種方法或其中的一些方法? 在此處輸入圖像描述
setThreadFactory
不會幫助你,它只是創建監視文件系統的單線程的另一種方法。
你需要做的是
FileAlterationListenerAdaptor.onFileCreate
不應自行處理文件。 相反,它應該將任務提交給線程池粗略地說,代碼應該是這樣的
int numberOfThreads = ...;
ExecutorService pool = java.util.concurrent.Executors.newFixedThreadPool(numberOfThreads);
FileAlterationListenerAdaptor adaptor = new FileAlterationListenerAdaptor() {
public void onFileCreate(final File file) {
pool.submit(new Runnable() {
// here you do file processing
doSomethingWithFile(file);
});
}
}
....
FileAlterationObserver observer = new FileAlterationObserver(directory);
observer.addListener(adaptor);
...
FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
monitor.addObserver(observer);
monitor.start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.