2012-07-03 10 views
7

ho questo semplice frammento di codice:ScheduledThreadPoolExecutor facendo tardi

/** 
* @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); 
} 

su una macchina, questo codice viene eseguito come previsto. output della console:

  • mar 3 luglio 10:32:34 EEST 2012
  • mar 3 luglio 10:32:34 EEST 2012
  • mar 3 luglio 10:32:35 EEST 2012
  • Tue luglio 03 10:32:35 2012 EEST
  • mar 3 luglio 10:32:36 EEST 2012
  • mar 3 luglio 10:32:36 EEST 2012 ...

Tuttavia su un'altra macchina, la data/ora sulla console mostra che ScheduledThreadPoolExecutor si sta facendo tardi. Ottenendo tardi intendo un paio di secondi :)

  • mar 3 luglio 10:32:34 EEST 2012
  • mar 3 luglio 10:32:37 EEST 2012
  • mar 3 luglio 10:32: 40 EEST 2012
  • mar 3 luglio 10:32:44 EEST 2012
  • mar 3 luglio 10:32:50 EEST 2012
  • mar 3 luglio 10:32:55 EEST 2012 ...

dettagli di prima macchina su cui codice viene eseguito con successo:

i3 di Windows 7 a 64 bit JRE 1.6.0.30

dettagli di seconda macchina su cui la pianificazione in ritardo:

Dual Core Windows XP 32 bit JRE 1.6.0.18

Mi chiedo perché c'è una tale differenza. Eventuali suggerimenti ?

Grazie in anticipo.

+1

Puoi fornire maggiori dettagli sull'ambiente (os, jvm)? – assylias

+0

La pianificazione utilizza chiamate di sistema a livello di sistema operativo per eseguire il ritardo, quindi se questo è sbagliato, si ha un problema di basso livello. –

+2

È possibile includere almeno l'utilizzo totale della CPU dei due host. –

risposta

1

in realtà il timer di pianificazione non è preciso, calcola il tempo in base ai tick della CPU. quindi se il carico della tua macchina è eccessivo, potrebbe esserci un ritardo. controlla il carico della tua seconda macchina!

Problemi correlati