tengo este sencillo fragmento de código:ScheduledThreadPoolExecutor haciendo tarde
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(10);
Runnable r = new Runnable() {
@Override
public void run() {
System.err.println(Calendar.getInstance().getTime());
}
};
exec.scheduleAtFixedRate(r,0, 500, TimeUnit.MILLISECONDS);
}
en una máquina, este código se ejecuta como se esperaba. salida de la consola:
- Mar Jul 03 10:32:34 CEST 2012
- Mar Jul 03 10:32:34 CEST 2012
- Mar Jul 03 10:32:35 CEST 2012
- Mar Jul 03 10:32:35 CEST 2012
- Mar Jul 03 10:32:36 CEST 2012
- Mar Jul 03 10:32:36 CEST 2012 ...
Sin embargo, en otra máquina, la marca de tiempo en la consola muestra ScheduledThreadPoolExecutor se está haciendo tarde. Por haciendo tarde me refiero a un par de segundos :)
- Mar Jul 03 10:32:34 CEST 2012
- Mar Jul 03 10:32:37 CEST 2012
- Mar Jul 03 10:32: 40 EEST 2012
- Mar Jul 03 10:32:44 CEST 2012
- Mar Jul 03 10:32:50 CEST 2012
- Mar Jul 03 10:32:55 CEST 2012 ...
detalles de la primera máquina en la que el código se ejecuta correctamente:
i3 Windows 7 64 bits JRE 1.6.0.30
detalles de la segunda máquina en la que la programación llega tarde:
doble núcleo Windows XP 32 bit JRE 1.6.0.18
Me pregunto por qué hay tanta diferencia. Alguna sugerencia ?
Gracias de antemano.
¿Puede dar más detalles sobre el medio ambiente (os, jvm)? – assylias
La programación utiliza llamadas al sistema de nivel del sistema operativo para realizar el retraso, por lo que si es incorrecto, tiene un problema de bajo nivel. –
Puede al menos incluir la utilización total de la CPU de los dos hosts. –