2011-12-21 17 views
11

Cómo retrasar un ciclo While a intervalos de 1 segundo sin ralentizar todo el código/computadora en el que se está ejecutando el retardo de un segundo (solo un pequeño bucle).Java Delay/Wait

+0

_sin ralentizar la totalidad code_ elaborar este –

+0

@JigarJoshi Estoy tratando de retrasar este bucle mientras que en intervalos de 1 segundo para mi plugin de Minecraft. Pero la mayoría de los métodos de espera pausan todo el servidor durante el tiempo establecido, en lugar de solo el ciclo –

+0

desea la ejecución del ciclo while durante un período de tiempo fijo y luego nuevamente con el retardo fijo. –

Respuesta

24

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

+0

¿Esto no detendrá la secuencia de comandos/computadora? –

+2

Esto simplemente pausaría ese hilo en particular en el que se está ejecutando este código. su computadora no se congelará –

11

Parece que su bucle se ejecuta en el hilo principal y si lo hace sleep en ese hilo pausará la aplicación (ya que solo hay un hilo que ha sido pausado), para solucionarlo puede poner este código en el nuevo Thread que corre paralelamente

try{ 

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

esto funciona perfectamente – ERJAN

1

Como se ha indicado Jigar puede utilizar otro hilo para hacer el trabajo que puede operar, dormir, etc independientemente de otros hilos. La clase java.util.Timer también puede serle útil, ya que puede realizar tareas periódicas sin tener que ingresar en la programación multiproceso.

2

Mis formas simples de retrasar un ciclo.

Ya puse los códigos aquí después de no seguir los estándares de 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 
+0

Me gusta la tercera manera, porque puede inhibir todo un núcleo de la CPU y nadie llamaría a este código olor. – Tom