Whileループを、実行中のコード/コンピューター全体を1秒の遅延(1つの小さなループだけ)に遅くすることなく、1秒間隔に遅延させるにはどうすればよいですか。
Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
メインスレッドでループが実行されているようで、そのスレッドでsleep
を実行すると、アプリケーションが一時停止します(一時停止しているスレッドは1つしかないため)。これを克服するには、このコードを新しいThread
並列に実行します
try{
Thread.sleep(1000);
}catch(InterruptedException ex){
//do stuff
}
ループを遅らせる簡単な方法。
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
Jigarが示したように、他のスレッドを使用して、他のスレッドとは無関係に動作、スリープなどを行うことができる作業を行うことができます。 Java.util.Timer
クラスは、マルチスレッドプログラミングに入らずに定期的なタスクを実行できるため、同様に役立ちます。