2014-05-19 184 views
0

我想使用ScheduledExecutorService在EJB中每運行幾秒鐘。但是,它似乎工作。我不確定我是否做錯了什麼。我發現這個網站:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.htmlScheduledExecutorService運行每隔幾秒

我想每隔幾秒鐘運行一些代碼。我不確定這是否是併發的,因爲我只想在一個重複運行的線程上執行。下面是代碼:

@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

已配置的百萬秒的初始延遲,然後你將要取消的任務它得到執行的機會之前。 –

+0

我想立即開始任務,然後每隔一秒重新運行一次。我將取消取消方法。應該添加什麼而不是新的Date()。getTime()? – user3189663

+0

'executor.scheduleAtFixedRate(runnable,0,1,TimeUnit.SECONDS);' –

回答

3

當使用EJB時​​,你不應該創建自己的線程池,而是讓容器爲你做。你應該有類似的東西:(`新的Date()的getTime()`)

@Singleton 
public class TimerService { 
    @EJB 
    HelloService helloService; 

    @Schedule(second="*/1", minute="*",hour="*", persistent=false) 
    public void doWork(){ 
     System.out.println("timer: " + helloService.sayHello()); 
    } 
}