web-dev-qa-db-ja.com

Java遅延/待機

Whileループを、実行中のコード/コンピューター全体を1秒の遅延(1つの小さなループだけ)に遅くすることなく、1秒間隔に遅延させるにはどうすればよいですか。

14
Gray Adams

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

27
COD3BOY

メインスレッドでループが実行されているようで、そのスレッドでsleepを実行すると、アプリケーションが一時停止します(一時停止しているスレッドは1つしかないため)。これを克服するには、このコードを新しいThread並列に実行します

try{

  Thread.sleep(1000);
}catch(InterruptedException ex){
  //do stuff
}
11
Jigar Joshi

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

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
4
D.R.Bendanillo

Jigarが示したように、他のスレッドを使用して、他のスレッドとは無関係に動作、スリープなどを行うことができる作業を行うことができます。 Java.util.Timerクラスは、マルチスレッドプログラミングに入らずに定期的なタスクを実行できるため、同様に役立ちます。

1
Paul Jowett