java - 观看 Service Java - 后台两个并行线程

标签 java multithreading thread-safety servletcontextlistener

我需要监视网络应用程序中两个目录中的更改(上传的文件)。我创建了一个ServletContextListener来触发对这两个目录的监控。

我的问题是,当第一次监控开始时,线程被阻塞,第二次监控没有启动。

是否可以保持对两个不同文件夹的监控并行和后台运行?

我知道问题是由于无限循环造成的,但不知道如何将此线程置于后台。任何帮助将不胜感激 。预先非常感谢您

ContextListener

@Override
    public void contextInitialized(ServletContextEvent event) {

        Path pathFolder1 = Paths.get("my_folder_1_path");
        MyWatcher watcher1 = new MyWatcher();

        Path pathFolder2 = Paths.get("my_folder_2_path");
        MyWatcher watcher2 = new MyWatcher();

        watcher1.startMonitoring(pathFolder1);
        watcher2.startMonitoring(pathFolder2);
    }

我的观察者

public void startMonitoring(Path directory) {

        try {
            FileSystem fs = directory.getFileSystem ();
            WatchService watcher = fs.newWatchService();

            while(true) {

                directory.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE);
                WatchKey watckKey = watcher.take();
                List<WatchEvent<?>> events = watckKey.pollEvents();

                for (WatchEvent event : events) {

                    if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
                        System.out.println("File created: " + event.context().toString());
                    }
                    if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) {
                        System.out.println("File removed: " + event.context().toString());
                    }
                }
                watckKey.reset();
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

最佳答案

您应该在应用程序服务器上配置一个线程工厂,通过 @Resource 注释注入(inject)它,并从那里使用线程。谷歌搜索的例子是 a blog entry about this .

关于java - 观看 Service Java - 后台两个并行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446388/

相关文章:

java - OPENGL Android获取我的图像的坐标

java - 使用可调整大小的数组在 Java 中实现队列 API

java - JSCH session 连接问题

Java - 由计时器控制的多个对象(用于游戏)

multithreading - QGLWidget的paintGL()方法从哪个Qt线程调用?

c++ - 虚方法调用线程安全吗?

java - 从 eclipse 远程调试

android - android 动画总是在 UI 线程中吗?

ASP.NET MVC 静态变量有多安全

c++ - 直观的线程安全