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/