Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Servlets 如何第一次运行ScheduledExecutorService?_Servlets_Scheduledexecutorservice - Fatal编程技术网

Servlets 如何第一次运行ScheduledExecutorService?

Servlets 如何第一次运行ScheduledExecutorService?,servlets,scheduledexecutorservice,Servlets,Scheduledexecutorservice,我有一个名为“调度器”的类: packagemodelo; 导入java.util.ArrayList; 导入java.util.concurrent.Executors; 导入java.util.concurrent.ScheduledExecutorService; 导入java.util.concurrent.ScheduledFuture; 导入java.util.concurrent.TimeUnit; /** * *@作者胡安·克鲁兹 */ 公共类调度器实现可运行的{ 私有可运行任务

我有一个名为“调度器”的类:

packagemodelo;
导入java.util.ArrayList;
导入java.util.concurrent.Executors;
导入java.util.concurrent.ScheduledExecutorService;
导入java.util.concurrent.ScheduledFuture;
导入java.util.concurrent.TimeUnit;
/**
*
*@作者胡安·克鲁兹
*/
公共类调度器实现可运行的{
私有可运行任务;
private ScheduledExecutorService executorService=Executors.newScheduledThreadPool(1);
公共计划程序(可运行任务,ScheduledExecutorService executorService){
this.task=任务;
this.executorService=executorService;
}
公共无效sesionesAbiertas(){
Runnable蜂鸣器=新建Runnable(){
公开募捐{
/*代码*/
}
}
};
ScheduledFuture BepperHandle=executorService.scheduleAtFixedRate(蜂鸣器,10,10,时间单位为秒);
executorService.schedule(新的Runnable(){
公开募捐{
蜂鸣器手柄。取消(真);
}
},60*60,时间单位为秒);
}
@凌驾
公开募捐{
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
}
问题是它从未被执行过,我不知道第一次调用它该怎么做,所以它每10秒执行一次代码(正如您在executorService中看到的)

我想我错过了一些第一次给你打电话的东西,但是我已经阅读了文档,我找不到遗漏的东西

编辑:我尝试删除类名称中的“implements Runnable”,并删除最后一个函数“@override public void run()”

简化示例代码 下面是一个经过修改的代码版本,以实现您的目标


始终关闭executor服务。否则,它的支持线程池可能会无限期地运行,就像您试图在哪个服务器上部署僵尸一样(例如Tomcat)?除了Servlet(如果有)之外,您还有哪些其他设施可以访问并愿意使用(例如CDI)?即使您可以访问上一个问题中的其他工具,您是否希望使用仅限Servlet的解决方案?非常感谢!但问题是它没有运行,因为(我认为)它是一个与其他类类似的类(我有15个类),即使有这些更改,它也无法运行。它是一个web应用程序,其中我有模型,我有servlet,但我不知道如何在网站启动后立即执行这个类,你知道怎么做吗?有些像梅因class@Jcbreppe是的,您的类有一种扭曲的设置,考虑到并发是多么令人困惑,这是可以理解的。所以我试着把事情简化,这样你就能看到所有运动的部分。关于servlets,我扩展了最后一部分。感谢您的知识,我现在正在阅读这篇文章,然后再试一次
package Modelo;

import java.util.ArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 *
 * @author Juan Cruz
 */
public class Scheduler implements Runnable{

    private Runnable task;
    private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);

    public Scheduler(Runnable task, ScheduledExecutorService executorService) {
        this.task = task;
        this.executorService = executorService;
    }

    public void sesionesAbiertas() {
        Runnable beeper = new Runnable() {
            public void run() {
                    /* Code */
                }
            }
        };
        ScheduledFuture<?> beeperHandle = executorService.scheduleAtFixedRate(beeper, 10, 10, TimeUnit.SECONDS);
        executorService.schedule(new Runnable() {
            public void run() {
                beeperHandle.cancel(true);
            }
        }, 60 * 60, TimeUnit.SECONDS);
    }

    @Override
    public void run() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}