2011-12-31 14 views
2

私は、javaで指定された時間だけメソッド/関数を実行する簡単な方法を探しています。メソッド/関数を指定された時間実行する

for(3 secs){ 
    x(); 
} 

この方法は実装が簡単で、パフォーマンスも良好でなければなりません。アーロンの答えため

+5

x()が4秒かかるとどうなりますか? – adatapost

+0

タスクを定期的に実行したい場合は、good ol Timerクラスを使用できます。 – Adrian

+1

x()を3秒間繰り返し実行するか、またはxが3秒間戻ってきたらブロックを終了しますか? – Sumit

答えて

4
long startTime = System.currentTimeMillis(); 
while(System.currentTimeMillis() - startTime <= 3000){ 
    x(); 
} 

+1、効率/性能のためのみの比較を残して、ループの外側の加算/減算を移動させる代わりに、long finishTime = System.currentTimeMillis() + 3000を用いました。

ただし、x()を入力してからx()を実行すると時間がかかる場合は、ループ全体が目的の時間より長く実行されることがあります。 x()が長さの場合、その中に停止条件のチェックを追加することもできます。

+1

気にしない、これは私のものと同じで、より効率的です。私は今私を削除しています。 –

+0

はい。私は答えがすでにそこにあるのを見たときに、私はちょうど私のことを投稿しようとしていました。 – eboix

+0

メソッドx()がどのように実行されるのでしょうか? OPは**特定の時間**メソッド/関数を実行している**と述べています。時間の数ではない、と思います。 – adatapost

3

Iは、効率/パフォーマンスのために、ループの外算術を移動する

long finishTime = System.currentTimeMillis()+3000; 
while(System.currentTimeMillis() <= finishTime){ 
    x(); 
} 

にしてください

1
void run (Runnable task , long milliseconds) throws Exception 
{ 
     new Thread () 
     { 
       public void run () 
       { 
        while (true) 
        { 
           task . run () ; 
        } 
       } 
     } . start () ; 
     Thread . sleep (milliseconds) ; 
     System . exit (0) ; 
} 

タスクが長いalloted時間以上かかる場合でも、これは動作します。

+0

+1:後に何かしたい場合、いいですね。 ;) –

関連する問題