Как задержать цикл while с интервалом в 1 секунду, не замедляя весь код/компьютер, на котором он работает, на одну секунду (только один маленький цикл).
Java Delay/Wait
Ответ 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
также может помочь вам, так как он может выполнять периодические задачи для вас, не прибегая к многопоточному программированию.