Java 如何在一个WatchService中注册多个文件夹

Java 如何在一个WatchService中注册多个文件夹,java,multithreading,concurrency,Java,Multithreading,Concurrency,有人能告诉我如何在一个watchservice中注册多个文件夹路径吗? 对于多个文件夹,一个WatchService哪个更好(速度)?还是为一个文件夹路径提供一个WatchService?多个文件夹最多可以有12个 来自Java教程(): 以下是实现watch服务所需的基本步骤: 为文件系统创建一个WatchService“watcher” 对于要监视的每个目录,请向watcher注册它。注册目录时,请指定要通知的事件类型。对于您注册的每个目录,您都会收到一个WatchKey实例 实现无限循环

有人能告诉我如何在一个watchservice中注册多个文件夹路径吗? 对于多个文件夹,一个WatchService哪个更好(速度)?还是为一个文件夹路径提供一个WatchService?多个文件夹最多可以有12个

来自Java教程():

以下是实现watch服务所需的基本步骤:

  • 为文件系统创建一个WatchService“watcher”
  • 对于要监视的每个目录,请向watcher注册它。注册目录时,请指定要通知的事件类型。对于您注册的每个目录,您都会收到一个WatchKey实例
  • 实现无限循环以等待传入事件。当一个事件发生时,密钥会被发送信号并放入观察者的队列中
  • 从观察者队列中检索密钥。您可以从密钥获取文件名
  • 检索密钥的每个挂起事件(可能有多个事件)并根据需要进行处理
  • 重置键,然后继续等待事件
  • 关闭服务:当线程退出或关闭(通过调用其closed方法)时,watch服务退出
对于12个文件夹,我可能会为每个WatchKey创建一个线程

  WatchService watcher = FileSystems.getDefault().newWatchService();

  // Repeat the following code to get a WatchKey for each folder
  try {
    Path dir = FileSystems.getDefault().getPath("logs", "access.log");
    WatchKey key = dir.register(watcher,
                           ENTRY_CREATE,
                           ENTRY_DELETE,
                           ENTRY_MODIFY);
  } 
  catch (IOException x) {
    System.err.println(x);
  }

你能不能给我一个代码提示,只用于在watch服务中注册多个路径的部分?其余的我都知道。谢谢你的解释!编辑答案。有用的东西发生在行目录寄存器(watcher,…)上;