2014-06-28 23 views
0

我有一個每10秒運行一次的類,但是當我多次執行它時,會啓動多個定時器。如果一個定時器已經運行,我希望其他定時器調用被忽略。我只想要一個定時器在給定的時間點運行。請幫忙。TimerTask類只能在java中運行一次

我的代碼:

import java.util.Timer; 
import java.util.TimerTask; 
public class Test1 extends TimerTask{ 
    @Override 
    public void run() { 
      System.out.println("In run method"); 
     } 

    public static void main(String args[]) { 
     System.out.println("In main method"); 
     Timer timer= new Timer(); 
     timer.schedule(new Test1(), 10000,10000); 
    } 
} 
+0

你在哪裏停止定時器一旦計劃? – Braj

+0

我不想停止計時器。我希望第一個定時器始終運行。其他定時器調用不應該被觸發。 – user56690

+0

你能解釋一下你如何運行多個任務? – Braj

回答

2

我想第一個定時器一直運行。其他定時器調用不應該被觸發。

嘗試用辛格爾頓彭定康只允許類的一個實例。

示例代碼:

public class Test extends TimerTask {  
    private static Test instance = new Test(); 

    private Test() {}  
    public static Test getInstance() { 
     return instance; 
    } 

    @Override 
    public void run() { 
     System.out.println("In run method"); 
    } 
} 

現在,如果你嘗試啓動同一實例會導致以下異常另一個任務:

java.lang.IllegalStateException: Task already scheduled or cancelled 
at java.util.Timer.sched(Unknown Source) 
at java.util.Timer.schedule(Unknown Source) 
+1

謝謝大家。通過在servlet上下文監聽器中添加計時器類來解決問題,並在服務器啓動時調用它。 – user56690

+0

聽起來不錯。如果問題得到解決,請關閉該線程。訪問[stackoverflow tour](http://stackoverflow.com/tour) – Braj

0

你爲什麼不嘗試類似,如果你啓動一個定時器,只讓其他計時器開始,如果這是真的還是假的設置BOOL TRUE,取決於你如何設置他們

某事像:

bool checkTimer = false; 

//Start a Timer and set checkTimer = true 

if(checkTimer == true) 
{ 
    //Start your other timers here 
} 
else 
{ 
    //Write message that timer is already running 
}