Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse:ScheduledExecutorService.scheduleWithFixedDelay不会在发布时删除_Java_Eclipse - Fatal编程技术网

Java Eclipse:ScheduledExecutorService.scheduleWithFixedDelay不会在发布时删除

Java Eclipse:ScheduledExecutorService.scheduleWithFixedDelay不会在发布时删除,java,eclipse,Java,Eclipse,我有个奇怪的问题 我有一个ScheduledExecutorService.scheduleWithFixedDelay,当我单击发布/停止重新启动服务器时,它不会“停止” 当我重新发布时,将有2个服务正在运行,运行相同服务的次数取决于我单击发布的次数 在我停止并启动服务器之后,这不会消失 我必须关闭eclipse并打开以停止它,我注意到只有在编辑初始化服务的类之后才会发生这种情况 我无法粘贴代码,但非常简单。。只有一个单身汉,并持有服务 private final ScheduledExecu

我有个奇怪的问题

我有一个ScheduledExecutorService.scheduleWithFixedDelay,当我单击发布/停止重新启动服务器时,它不会“停止”

当我重新发布时,将有2个服务正在运行,运行相同服务的次数取决于我单击发布的次数

在我停止并启动服务器之后,这不会消失

我必须关闭eclipse并打开以停止它,我注意到只有在编辑初始化服务的类之后才会发生这种情况

我无法粘贴代码,但非常简单。。只有一个单身汉,并持有服务

private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(new Runnable() {
                public void run() { system.out("hello" }
            }, 60 * 60, SECONDS);

我似乎找不到问题所在,有人能帮我吗。

当应用程序取消部署时,您应该关闭计划程序。更简单的方法是声明一个实现a,并在
contextdestromed()
方法中关闭调度程序。

Executors.newScheduledThreadPool(1);创建一个非守护进程工作线程,它防止JVM关闭,除非您显式关闭调度程序

scheduler.shutdown();
或者,您可以执行以下操作

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1,
            new ThreadFactory() {
                public Thread newThread(Runnable r) {
                    Thread t = new Thread(r);
                    t.setDaemon(false);
                    return t;
                }

            });

在这种情况下,工作线程将是一个守护进程,不会阻止JVM在程序完成时退出

您的部署过程一定有问题。停止和启动服务器必须始终停止服务,除非您的部署过程在每次单击“发布”时多次发布应用程序。这只能在知道安装(内部/外部启动,Tomcat/JBase.YUP)时进行调试。我确实考虑过这一点,但我不明白为什么我需要这么做,因为我个人觉得API应该能够处理它。容器怎么会知道你产生了线程?我是说ScheduledExecutorService。。。这是唯一的解决办法吗?下面的解决方案会起作用吗?同样的事情:ScheduledExecutorService是一个实用类,它根本没有连接到JEE和webapps。它不知道它在网络应用程序中使用,也不知道网络应用程序何时被销毁。因此,提供一个线程工厂来创建守护进程线程,或者在应用程序被销毁时关闭服务。确保守护进程线程仅在JVM退出时停止运行。当应用程序被重新部署时就不会了。这是你必须做的。但我宁愿问自己:在一个应用程序中有许多调度器是正常的吗?打开就足够了吗?我更喜欢设置守护进程解决方案,但是有什么我应该注意的吗?当我重新发布时线程会停止吗?