2011-09-01 22 views
1

下面的代碼按順序啓動並運行兩個定時器,我認爲第一個定時器會在第二個定時器初始化後停止運行。看起來,當一個定時器被賦予一個新的引用時,它的前一個引用只是繼續執行給定的任務?定時器是否會一直運行直到它的.cancel方法被調用

public class TimerTest { 

    private TimerTask timerTask; 
    private Timer timer; 
    private int counter = 0; 
    private final int delay = 1000; 

    public static void main(String[] args){ 
     new TimerTest().runTimer(); 
     new TimerTest().runTimer(); 
    } 

    private void runTimer(){ 
     timer = new Timer(); 
     timerTask = new TimerTask() { 
      public void run() {   
       ++counter; 
       System.out.println("output - "+counter); 
      } 
     }; 
     timer.scheduleAtFixedRate(timerTask, delay, delay); 
    } 

} 
+0

沒有提到第一個計時器了。當垃圾收集器工作時它會停止 –

+1

@Armen:即使定時器不再被引用,它調度的任務仍然被定時器的後臺運行線程引用。它不會停止。 –

+1

@Armen沒有第一個定時器不被開發者使用,但它仍然在內存中並且處於運行模式,直到它不能應用程序或者明確地取消定時器 – Pratik

回答

2

是的。將對象引用分配給變量不會修改對象的狀態。對象是BTW,不知道它是否分配給0,1或多個變量。

此外,請注意,由於您實例化了兩個TimerTest對象,每個對象都有其自己的計時器字段,所以第二個計時器被分配給與第一個計時器不同的變量。

相關問題