Java 计划每隔几秒钟运行一次DexecutorService
我正在尝试使用ScheduledExecutorService在EJB中每隔几秒钟运行一次。然而,它似乎确实起了作用。我不确定我是否做错了什么。我发现这个网站: 我想每隔几秒钟运行一些代码。我不确定这是否是并发,因为我只想在一个重复运行的线程上执行。代码如下:Java 计划每隔几秒钟运行一次DexecutorService,java,concurrency,timer,ejb,Java,Concurrency,Timer,Ejb,我正在尝试使用ScheduledExecutorService在EJB中每隔几秒钟运行一次。然而,它似乎确实起了作用。我不确定我是否做错了什么。我发现这个网站: 我想每隔几秒钟运行一些代码。我不确定这是否是并发,因为我只想在一个重复运行的线程上执行。代码如下: @Startup @Singleton public class StartUp { private ScheduledExecutorService executor; @PostConstruct publ
@Startup
@Singleton
public class StartUp {
private ScheduledExecutorService executor;
@PostConstruct
public void start() {
executor = Executors.newScheduledThreadPool(1);
Runnable runnable = new Runnable() {
public void run() {
while(true) {
System.out.println("i");
// after send an e-mail
}
}
};
ScheduledFuture<?> scheduledFuture = executor.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
}
}
@启动
@独生子女
公营创业{
专用ScheduledExecutorService执行器;
@施工后
公开作废开始(){
executor=Executors.newScheduledThreadPool(1);
Runnable Runnable=新的Runnable(){
公开募捐{
while(true){
系统输出打印号(“i”);
//发送电子邮件后
}
}
};
ScheduledFuture ScheduledFuture=executor.scheduleAtFixedRate(可运行,0,1,时间单位.s);
}
}
这似乎没有运行。我做错了什么
有什么想法吗?在使用EJB时,您不应该创建自己的线程池,而是让容器为您创建线程池。您应该有类似于:
@Singleton
public class TimerService {
@EJB
HelloService helloService;
@Schedule(second="*/1", minute="*",hour="*", persistent=false)
public void doWork(){
System.out.println("timer: " + helloService.sayHello());
}
}
您已配置了数百万秒的初始延迟(
new Date().getTime()
),然后您将在任务有机会执行之前取消该任务。我希望立即启动该任务,然后每隔一秒重新运行一次。我将取消方法。应该添加什么来代替新的Date().getTime()?executor.scheduleAtFixedRate(可运行,0,1,TimeUnit.SECONDS)代码>谢谢。这是可行的,但我想做的是每隔几秒钟运行一次线程。因此,如果我取出while循环,它只打印一次“I”,然后它就不执行了。我错过什么了吗?我需要重复运行。据我所知,除非程序终止,否则计划将每秒运行一次。在主线程上是否有一个sleep()来阻止程序终止?