每个 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 可以创建多少个——都引用了全局文件系统。
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 可以创建多少个——都引用了全局文件系统。