每个 JVM 是 Java WatchService 还是一个应用程序可以启动多个?

is Java WatchService per JVM or can an app start multiple?

FileSystems.getDefault().newWatchService();

这是创建一个新的 watchService 还是只提供一个单例对象?

它说:

@return a new watch service

我读到的一些 post 让我认为可能只有 1 个,因此如果您执行 .take().poll(),一个线程可能会获得另一个线程 watchKey 事件。我想也许我需要使用一个,但现在我不太确定,因为我确实有 2 个左右 运行,它们似乎有效,但我没有明确测试它。

有人知道您是否可以在一个应用程序中使用多个 watchServices 吗?

按照这里的源代码来看,似乎每次都调用它 returns 一个新的 WatchService

class WindowsFileSystem
    extends FileSystem
{
..............................
..............................
@Override
    public WatchService newWatchService()
        throws IOException
    {
        return new WindowsWatchService(this);
    }
}

this 这里指的是 WindowsFileSystem 对象(我在 Windows JVM 上检查它)它是静态变量,因此是单一的每个 JVM

public final class FileSystems {
    private FileSystems() {
    }
.................
.................
public static FileSystem getDefault() {
        return DefaultFileSystemHolder.defaultFileSystem;
    }

}

因此我们可以得出结论,FileSystem 对象是全局的,但是 WatchService 可以创建多少个——都引用了全局文件系统。