El siguiente código:Thread.sleep espera más de lo esperado
long msBefore = System.currentTimeMillis();
//Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
try
{Thread.sleep(200);
} catch (InterruptedException e){}
System.out.println("Time: " + (System.currentTimeMillis() - msBefore));
impresiones:
Time: 578
Time: 594
Time: 625
Time: 640
Time: 641
Time: 609
Time: 625
Time: 625
Time: 610
Time: 609
Time: 625
Time: 625
Time: 422
Time: 625
Time: 594
Time: 609
Time: 625
Time: 594
Time: 594
Time: 625
¿Dónde está el problema ??
Mientras esté sujeto a la precisión de su sistema, debería estar mucho más cerca que esto. En mis sistemas Windows y Linux, rara vez es más de 2 ms más de lo esperado. ¿Qué sistema operativo tienes? –
Hola, Mohammed. Como han señalado otros, esto estará sujeto a la precisión de sus sistemas (incluso factores ambientales como la temperatura pueden aparecer). Solo por curiosidad, ¿cuál es el problema real que está tratando de resolver con este código? Dependiendo de su respuesta, alguien aquí podría ayudarlo con una mejor manera de hacerlo (por ejemplo, un TimerTaskExecutor sería mucho más preciso para imprimir latidos regulares del corazón). Por favor, asegúrese de plantear la pregunta en un hilo diferente. Aclamaciones. –
Lo he ejecutado varias veces más tarde, y es en gran medida preciso ahora. Gracias a todos por su ayuda. –