Come faccio a ritardare un ciclo while ad intervalli di 1 secondo senza rallentare l'intero codice/computer su cui è in esecuzione fino ad un secondo (solo un piccolo loop).Java Delay/Wait
risposta
Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
Questo non mette in pausa l'intero script/computer? –
Ciò interromperà solo quel particolare thread in cui è in esecuzione questo codice. il tuo computer non verrà congelato –
Sembra che il tuo loop gira su Main thread e se fai sleep
su quel thread metterà in pausa l'app (dato che c'è solo un thread che è stato messo in pausa), per superare questo puoi mettere questo codice nel nuovo Thread
che corre parallelamente
try{
Thread.sleep(1000);
}catch(InterruptedException ex){
//do stuff
}
funziona perfettamente – ERJAN
Come Jigar ha indicato è possibile utilizzare un altro thread di fare un lavoro che può funzionare, dormire ecc indipendentemente da altri thread. La classe java.util.Timer
potrebbe aiutarti anche perché può eseguire attività periodiche per te senza dover accedere alla programmazione con multithreading.
I miei semplici modi per ritardare un ciclo.
Ho già inserito i codici qui dopo aver omesso di seguire gli standard dello 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
Mi piace il terzo modo, perché può inibire un intero core della CPU e nessuno lo chiamerebbe mai un odore di codice. – Tom
_without rallentare l'intero _codice elaborare questa –
@JigarJoshi Sto cercando di ritardare questo ciclo while ad intervalli di 1 secondo per il mio plugin di Minecraft. Ma la maggior parte dei metodi di attesa sospendono l'intero server per il tempo impostato, piuttosto che solo il ciclo –
si desidera l'esecuzione del ciclo while per un determinato periodo di tempo e quindi di nuovo in un ritardo fisso. –