2010-01-16 3 views
15

Ecco il mio codice:Solo un thread alla volta!

new Thread() { 
    @Override 
    public void run() { 
     try { player.play(); } 
     catch (Exception e) { System.out.println(e); } 
    } 
}.start(); 

che crea e avvia un thread. Mi piacerebbe modificare questo codice in modo che il thread inizi solo se non ci sono altri thread aperti in quel momento! Se ci sono mi piacerebbe chiuderli e avviarlo. Grazie in anticipo!

+3

(tranne il thread principale, immagino;)) –

risposta

36

È possibile creare un ExecutorService che consente solo un singolo thread con il metodo Executors.newSingleThreadExecutor. Una volta che il singolo esecutore filo, è possibile chiamare execute con un parametro Runnable:

Executor executor = Executors.newSingleThreadExecutor(); 
executor.execute(new Runnable() { public void run() { /* do something */ } }); 
+0

affascinante, non so se avrò bisogno di questo, ma buono a sapersi. –

+0

Ma poi poteva avere un solo thread in esecuzione contemporaneamente. – danben

+1

Questo è quello che vuole ho pensato, solo 1 Thread di quel tipo in esecuzione in un dato momento. –

-6

si potrebbe creare un membro dati statico per la classe (dove filettatura avviene) che viene incrementato ogni volta che un oggetto di quella classe si chiama, e letto che u ottenere il numero di thread iniziato

+1

è una buona idea, ma come chiuderei gli altri thread? non avrei alcun riferimento a loro –