Java Delay/Wait

Как задержать цикл while с интервалом в 1 секунду, не замедляя весь код/​​компьютер, на котором он работает, на одну секунду (только один маленький цикл).

Ответ 1

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

Ответ 2

Кажется, ваш цикл работает в основном потоке, и если вы делаете sleep в этом потоке, он приостанавливает приложение (поскольку есть только один поток, который был приостановлен), чтобы преодолеть это, вы можете поместить этот код в новый Thread, который выполняется параллельно

try{

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

Ответ 3

Мои простые способы задержки цикла.

Я уже установил коды здесь после того, как не выполнил стандарты 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

Как показал Jigar, вы можете использовать другой Thread для выполнения работы, которая может работать, спать и т.д. независимо от других потоков. Класс java.util.Timer также может помочь вам, так как он может выполнять периодические задачи для вас, не прибегая к многопоточному программированию.