2012-07-03 14 views
7

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.

+1

¿Puede dar más detalles sobre el medio ambiente (os, jvm)? – assylias

+0

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. –

+2

Puede al menos incluir la utilización total de la CPU de los dos hosts. –

Respuesta

1

en realidad el temporizador de programación no es preciso, calcula el tiempo por cpu ticks. así que si la carga de su máquina es demasiado pesada, puede haber algún retraso. ¡compruebe la carga de su segunda máquina!

Cuestiones relacionadas