2011-12-21 9 views
11

実行中のコード/コンピュータ全体を1秒の遅延(1つの小さなループ)だけ遅らせることなく、whileループを1秒間隔に遅延させる方法を教えてください。Java遅延/待機

+0

_without私はMinecraftのプラグインの1秒間隔でこのwhileループを遅らせるしようとしている@JigarJoshiこの –

+0

手の込んだcode_全体を減速。しかし、waitメソッドの大部分は、一定時間だけwhileループを実行し、再び固定遅延で実行したい場合は、ループ –

+0

ではなく、設定された時間だけサーバー全体を一時停止します。 –

答えて

24

Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)

+0

これはスクリプト/コンピュータ全体を一時停止しませんか? –

+2

これは、このコードが実行されている特定のスレッドを一時停止するだけです。あなたのコンピュータは冷凍されません。 –

11

あなたがその新しいThreadにこのコードを置くことができ、これを克服するために、あなたのループは、メインスレッド上で動作し、あなたがそのスレッドにsleepを行う場合(一時停止されている唯一のスレッドがあるので)それはアプリを一時停止するようですJigarは、あなたが独立して、他のスレッドの動作可能仕事、睡眠などを行うために、別のスレッドを使用することができます示したように並列

try{ 

    Thread.sleep(1000); 
}catch(InterruptedException ex){ 
    //do stuff 
} 
+0

これは完全に動作します – ERJAN

1

実行されます。 java.util.Timerクラスは、マルチスレッドプログラミングを受けることなく、定期的なタスクを実行できるので、同様に役立ちます。

2

ループを遅らせる簡単な方法です。

私はすでにここにコードを入れて、stackoverflowの標準に従わなかった。

//1st way: Thread.sleep : Less efficient compared to 2nd 
try { 
    while (true) {//Or any Loops 
    //Do Something 
    Thread.sleep(sleeptime);//Sample: Thread.sleep(1000); 1 second sleep 
    } 
} catch (InterruptedException ex) { 
    //SomeFishCatching 
} 
//================================== Thread.sleep 


//2nd way: Object lock waiting = Most efficient due to Object level Sync. 
Object obj = new Object(); 
try { 
    synchronized (obj) { 
    while (true) {//Or any Loops 
    //Do Something 
    obj.wait(sleeptime);//Sample obj.wait(1000); 1 second sleep 
    } 
    } 
} catch (InterruptedException ex) { 
    //SomeFishCatching 
} 
//=============================== Object lock waiting 

//3rd way: Loop waiting = less efficient but most accurate than the two. 
long expectedtime = System.currentTimeMillis(); 
while (true) {//Or any Loops 
    while(System.currentTimeMillis() < expectedtime){ 
    //Empty Loop 
    } 
    expectedtime += sleeptime;//Sample expectedtime += 1000; 1 second sleep 
    //Do Something 
} 
//===================================== Loop waiting 
+0

私は3番目の方法が好きです。なぜなら、それはCPUコア全体を阻害する可能性があり、誰もこれをコードのにおいと呼ぶことはないからです。 – Tom

関連する問題