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.
}
}