2012-11-14 63 views
0

我需要創建一個對象,使用它自己的類方法停止執行一定的時間。如何讓程序跟蹤時間流逝並在指定的時間過去後執行功能。跟蹤currentTimeMillis

我想象.......

long pause; //a variable storing pause length in milliseconds............. 
long currentTime; // which store the time of execution of the pause ,............. 

和當另一個變量跟蹤時間具有相同的值作爲currentTime的+暫停,則執行代碼的下一行。是否有可能創建一個短時間內每變化一個毫秒的變量?

+0

'Thread.sleep(pause)'...? – MadProgrammer

+0

我不能使用任何線程:\分配 –

+1

如何計時器? –

回答

2

對於一個簡單的解決方案,你可以只使用Thread#sleep

public void waitForExecution(long pause) throws InterruptedException { 
    // Perform some actions... 
    Thread.sleep(pause); 
    // Perform next set of actions 
} 

具有定時...

public class TimerTest { 

    public static void main(String[] args) { 
     Timer timer = new Timer("Happy", false); 
     timer.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       System.out.println("Hello, I'm from the future!"); 
      } 
     }, 5000); 

     System.out.println("Hello, I'm from the present"); 
    } 
} 

並配有循環

long startAt = System.currentTimeMillis(); 
long pause = 5000; 
System.out.println(DateFormat.getTimeInstance().format(new Date())); 
while ((startAt + pause) > System.currentTimeMillis()) { 
    // Waiting... 
} 
System.out.println(DateFormat.getTimeInstance().format(new Date())); 

注意,這是更那麼隨着循環繼續消耗CPU週期,其他兩種解決方案的代價就會很高,其中就是這樣和Timer使用內部調度機制,允許線程空閒(並且不消耗週期)

+0

eugh,我知道他想要for循環。我會測試n小提琴,非常感謝你的方向@MadProgrammer :) –

+0

你可能在'while'循環中很好,並調用'Thread#yield',這至少會讓系統中的其他線程有機會運行,但是這可能會影響你想要達到的目標 – MadProgrammer