2013-04-17 16 views
0

如何在單獨的線程和給定的時間間隔內重複運行此類的實例? (你已經注意到我正在使用Java 2 EE)。安排常規任務而不擴展TimerTask?

public class Gate extends AbsDBObject<Gate> implements Runnable{ 
    public void Run(){ 
    //Something 
    } 
} 

我已經Gate類擴展TimerTask類和使用Timer這樣做過:

Timer timer = new Timer(); 
Gate gates = Gate.fetchOne(); 
timer.schedule(gate, 0, 1000); 

但在這種情況下,我不能擴展任何其他類。我該怎麼辦?

回答

2

如果您使用的是ScheduledExecutorService那麼您只需執行Runnable對象,而不是TimerTask對象。

ScheduledExecutorService executorService = 
    new ScheduledThreadPoolExecutor(corePoolSize); 
Gate gate = Gate.fetchOne(); 
executorService.scheduleAtFixedRate(gate, 0, 1, TimeUnit.SECONDS); 

這節省了擴展的必要性。

+0

你能解釋一下它的使用有點? – MoienGK

+0

thnx - 我認爲它會做的伎倆 – MoienGK

+0

也有什麼辦法,我可以阻止它?我想添加一個開始停止鏈接,以便我可以控制服務 – MoienGK

1

嘗試

Timer timer = new Timer(); 
    final Gate gates = Gate.fetchOne(); 
    timer.schedule(new TimerTask() { 
     public void run() { 
      gates.run(); 
     } 
    }, 0, 1000); 
+0

thnx回覆,你如何看待鄧肯瓊斯的解決方案? – MoienGK

+1

它是100%更好,但你問了TimerTask :) –