我正在尝试使用ScheduledExecutorService在EJB中每隔几秒运行一次。但是,它似乎确实有效。我不确定我做错了什么。我找到了这个网站:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html。
我想每隔几秒运行一些代码。我不确定这是否是并发性的,因为我只想在一个重复运行的Thread上执行。以下是代码:
@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);
}
}
这似乎没有运行。我做错了什么?
有什么想法吗?
答案 0 :(得分:3)
使用EJB时,您不应该创建自己的线程池,而是让容器为您执行此操作。你应该有类似的东西:
@Singleton
public class TimerService {
@EJB
HelloService helloService;
@Schedule(second="*/1", minute="*",hour="*", persistent=false)
public void doWork(){
System.out.println("timer: " + helloService.sayHello());
}
}