簡體   English   中英

如何使 org.apache.commons.io.monitor 表現多線程?

[英]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不會幫助你,它只是創建監視文件系統的單線程的另一種方法。

你需要做的是

  1. 創建將為新文件工作的線程池。 通過這種方式,您可以控制並行處理的新文件數量(相信我,您不希望無限並發)
  2. 您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM