2014-09-29 60 views
0

我正在用Java編寫一個代碼,它有三個主要的方法被連續調用。今天,我的教授告訴我,通過設置代碼的頻率來改進代碼,這意味着應該爲每種方法分配一個特定的時間。如果在這段時間之前完成,它應該等待那麼多時間,然後調用應該轉到下一個方法。如何在java中修復某個方法的特定時間

例如:如果第一個方法的時間爲3秒,則應等待3秒鐘,即使完成,然後移至下一個方法感。

我已經在我的代碼中使用了一個計時器來減慢運動,因爲它是一個GUI。我打算使用另一個計時器,但我覺得它只會減慢速度。我如何在特定的時間內修復該方法的時間,比如3秒。

如果您有任何想法,請讓我知道。

+0

發佈您的代碼的相關部分。現在這個論壇的問題太廣泛了。 – 2014-09-29 22:09:33

+0

嘗試使用Thread.sleep() – 2014-09-29 22:10:17

+0

@ PM77-1該代碼太大,無法發佈,我只想知道是否定時器是用於固定時間延遲,如果不是可以使用什麼 – Ambidextrous 2014-09-29 22:10:51

回答

1

如果你不能睡在你自己的線程上,在另一個線程上運行任務。單個執行程序線程可以很好地執行,您可以將任務提交到執行程序。睡在執行程序線程中不應該影響GUI線程。

private Executor executor = Executors.newFixedThreadPool(1); 

public void method1() { 
    System.out.println("Method 1 called"); 
} 

public void method2() { 
    System.out.println("Method 2 called"); 
} 

public void method3() { 
    System.out.print("Method 3 called"); 
} 

public void start() { 
    executor.execute(new Runnable() { 
     private final long WAIT_TIME = 3000; // ms 

     @Override 
     public void run() { 
      long startTime = System.currentTimeMillis(); 
      method1(); 
      sleep(startTime); 

      startTime = System.currentTimeMillis(); 
      method2(); 
      sleep(startTime); 

      startTime = System.currentTimeMillis(); 
      method3(); 
      sleep(startTime); 
     } 

     private void sleep(long startTime) { 
      long timeTaken = System.currentTimeMillis() - startTime; 
      long timeLeft = WAIT_TIME - timeTaken; 
      if(timeLeft < 0) return; 

      try { 
       Thread.sleep(timeLeft); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

    }); 
} 
相關問題