ScheduledExecutorService每隔几秒运行一次

时间:2014-05-19 09:57:55

标签: java concurrency timer ejb

我正在尝试使用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);
    }
}

这似乎没有运行。我做错了什么?

有什么想法吗?

1 个答案:

答案 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());
    }
}