首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止WatchService (java)

如何阻止WatchService (java)
EN

Stack Overflow用户
提问于 2021-02-23 17:37:53
回答 1查看 545关注 0票数 1

我怎样才能阻止死刑的执行:

代码语言:javascript
复制
key = watchService.take()

我的代码:

代码语言:javascript
复制
//Watcher
public class DirectoryWatcherExample {

    public static void main(String[] args) throws IOException, InterruptedException {

        WatchService watchService = FileSystems.getDefault().newWatchService();
        //My folder
        Path path = Paths.get("D:\\java\\Input");
        
        path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
        WatchKey key;
        while (((key = watchService.take()) != null)) {
            
            System.out.println(key);
            System.out.println(key.toString());
            
            for (WatchEvent<?> event : key.pollEvents()) {
                if(event.context().toString().contains(".dat")){
                
                    System.out.println("FileName: "+event.context());
            
                }
            }
            key.reset();
        }

        watchService.close();
    }

}

我的代码正在等待该行的执行,是否有可能以某种方式停止执行,尝试:

代码语言:javascript
复制
 key.cancel();
 watchService.close()

但是这并没有给出任何结果,你能告诉我如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 20:01:02

take()方法java.nio.WatchService被定义为不确定地等待,直到一个被监视的事件发生。所以没有办法“阻止”它。

如果您不想等待一个未确定的时间,可以使用poll() (它会立即返回),或者使用poll(long timeout, TimeUnit unit) (在指定的时间之后或事件发生时返回),不管首先发生什么。

运行这样一个观察器服务最“自然”的地方是一个后台线程,这样程序就可以在观察者等待寻找的事件时继续运行。Callable/Future类是这里使用的一个很好的候选。当观察者在ThreadFuture中运行时,主程序可以使用Thread.interrupt()Future.cancel()“停止”它。

并确保加入或守护您创建的线程,否则您的程序将无法完成。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66338242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档