当java.nio.file.StandardWatchEventKinds.OVERFLOW发生时,如何获取丢失的事件

时间:2014-04-22 13:58:58

标签: java nio watchservice

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

的Java应用程序
watchKey = watchService.take();

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

watchKey.reset();

对事件进行轮询和正确处理。

问题出现在我下次致电watchService.take()

在处理事件期间发生了更多事件,因此第一个事件的类型为StandardWatchEventKinds.OVERFLOW

如何抓住这些事件或阻止事件丢失? 重要的是我不要放弃任何事件。

2 个答案:

答案 0 :(得分:1)

可能的解决方案是在一个线程中获取事件,但在另一个线程中处理它们。例如,您可以使用Executor获得的Executors.newSingleThreadExecutor并向其发送事件处理任务。

答案 1 :(得分:0)

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