2014-09-28 50 views
0

我有一個Java項目,它主要創建一個擴展Thread的類的實例(ThreadClient)。我需要ThreadClient.run啓動2個定時器來定期運行ThreadClient類的2個方法。Java:使用定時器週期性地運行一個方法

我在互聯網上找到的例子只是表明定時器可以啓動一個類的實例的run方法,該類實例將Thread類放出。 我不需要創建一個新類,只需運行創建定時器的同一類的2個方法即可。 類似於C#的作用:

public class ThreadClient 
{ 
    private Timer _timer; 

    public ThreadClient() { 
     Start(); 
    } 

    private void Start() 
    { 
     _timer = new Timer(3000); // Set up the timer for 3 seconds 
     _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed); 
     _timer.Enabled = true; // Enable it 
    } 

    private void _timer_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     // do something 
    } 
} 

方法_timer_Elapsed屬於創建定時器類。

由於提前, 塞繆爾

+0

所以你被困在? (雙關打算!) – Sikorski 2014-09-28 13:23:51

+0

你的問題是什麼?你有沒有一個,還是這只是一個關於Java不是C#的咆哮? Java有匿名類和lambda表達式。學習使用它們。 – 2014-09-28 13:45:57

+0

此外,你應該使用ScheduledExecutorService:http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newScheduledThreadPool-int- – 2014-09-28 13:51:56

回答

0

那怎麼我終於達到了我的目標:

// Timer to process sales 
    TimerTask ttProcessSales = new TimerTask() { 

     @Override 
     public void run() { 
      processSales(); 
     } 
    }; 
    Timer tProcessSales = new Timer(); 
    tProcessSales.schedule(ttProcessSales, 0, this._processTaskTimeInterval); 

    // Timer to process tasks 
    TimerTask ttProcessTask = new TimerTask() { 

     @Override 
     public void run() { 
      processTasks();    
     } 
    }; 
    Timer tProcessTasks = new Timer(); 
    tProcessTasks.schedule(ttProcessTask, 0, this._processTaskTimeInterval); 

這樣,我可以使用定時器,而不創造的每一個方法的新類運行的類的2種方法我需要執行。