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

标签 java watchservice

FileSystems.getDefault().newWatchService();

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

它说:

@return a new watch service

我读到的一些帖子让我觉得可能只有 1 个,所以如果你执行 .take().poll() 一个线程可能会得到另一个线程watchKey 事件。我想也许我需要使用一个,但现在我不太确定,因为我确实有 2 个左右正在运行,它们似乎可以工作,但我还没有明确测试它。

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

最佳答案

根据这里的源代码,似乎每次调用它时都会返回一个新的 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 可以与创建的数量一样多 - 所有这些都引用全局文件系统。

关于java - Java WatchService 是每个 JVM 还是一个应用程序可以启动多个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248267/

相关文章:

Java创建实例数组

java - MVC : Best way of watching a directory for changes

java - WatchService 应该在注册时阻塞吗?

Java 关系运算符

java - 用于 UNIX sys/classes/gpio 文件的 NIO watchservice

Java:WatchService 在复制内容之前得到通知

Java 7 WatchService - 忽略同一事件的多次出现

java - Tomcat 异常 : java. lang.NullPointerException utils.ManageIP.validIp (ManageIP.java:113)

java - 在 GlassFish 上创建 JDBC 连接池仅接受 Oracle 的一个操作数

java - CardLayout Swap 刷新面板