2

我正忙于编写一个使用java.nio.file.WatchService.

watchKey = watchService.take();

for (WatchEvent<?> event : watchKey.pollEvents()) {
// Handle the events
}

watchKey.reset();

该事件被轮询并正确处理。

下次我打电话时问题来了watchService.take()

在处理事件期间,发生了更多事件,因此第一个事件是 type StandardWatchEventKinds.OVERFLOW

如何获取这些事件或阻止事件丢失?重要的是我不会丢失任何事件。

4

2 回答 2

1

可能的解决方案是在一个线程中获取事件,但在另一个线程中处理它们。例如,您可以使用Executor获取的对象Executors.newSingleThreadExecutor并将事件处理任务分派给它。

于 2014-04-22T14:36:47.983 回答
0

从 watchService 中创建了一个由 10 个消费者组成的池。这样就不会丢失任何事件。

于 2015-07-09T13:19:28.777 回答