2013-07-02 42 views
5

Ho una classe che si estende Thread.Come verificare se un thread è già stato avviato o meno in Java?

Inizierò la discussione ad un certo punto.

Dopo un po 'di tempo ho bisogno di controllare se quel thread è già avviato o no?

In modo che possa iniziare il thread in quel punto particolare.

mia classe thread sarà,

public class BasicChatListener extends Thread{ 

    public void run(){ 


    } 

} 

ho bisogno di conoscere il particolare filo di una classe BasicChatListener è in funzione oppure no? Perché nella mia applicazione sono già in esecuzione più thread.

Come i membri del nostro stack mi aiuteranno.

+0

Hai tenuto il riferimento al 'BasicChatListener' specificato, no? – johnchen902

+0

Sembra che sia necessario creare un inizio solo per un ascoltatore. Puoi creare un'istanza di 'BasicChatListener' e avviarla allo stesso tempo? –

+0

@Vignesh Vino, ma come fare riferimento al thread 'BasicChatListener' in particolare per il controllo? Anche io posso avere più thread nella mia applicazione? Questo è quello che ho chiesto. –

risposta

6

È possibile utilizzare Thread.getState() e utilizzare il corrispondente states.

Si noti che quando si legge questo stato potrebbe essere cambiato, ma si può essere in grado di determinare qualcosa di interesse. Controlla this state diagram per le transizioni disponibili.

+0

+1 schema link-state utile –

+0

Come fare riferimento in particolare al thread 'BasicChatListener' per il controllo? –

+0

Probabilmente è meglio usare un monitor, un semaforo o qualche altro oggetto condiviso poiché gli stati del thread sono un po 'limitati. Correre potrebbe non significare iniziato nel grado desiderato. –

1

si può controllare con isAlive ..

isAlive test se questa discussione è viva. Un thread è vivo se è stato avviato e non è ancora morto.

+0

+1 Per me, usare isAlive è più chiaro di chiamare getState e controllare che lo stato non sia nuovo. –

1

Io uso questo codice Thread.isAlive()

1

È possibile utilizzare GetState()

restituisce lo stato di questo thread. Questo metodo è progettato per l'uso nel monitoraggio dello stato del sistema, non per il controllo della sincronizzazione.

o booleana isAlive()

Prove se questa discussione è vivo. Un thread è vivo se è stato avviato e non è ancora morto.

1

Thread.isAlive() può determinare se un thread è in esecuzione.

Verifica se questo thread è vivo. Un thread è vivo se è stato avviato e non è ancora morto.

Thread#getState(); può restituire lo stato esatto di un thread.

Restituisce lo stato di questo thread. Questo metodo è progettato per l'uso nel monitoraggio dello stato del sistema, non per il controllo della sincronizzazione.

3

Utilizzare uno Thread#isAlive()

if (Thread.currentThread().isAlive()) 

JavaDoc dice:

Verifica se questa discussione è viva. Un thread è vivo se è stato avviato e non è ancora morto.

Oppure, utilizzare Thread#getState() come

Thread.State currState = Thread.currentThread().getState(); 
if (currState != Thread.State.NEW && currState != Thread.State.TERMINATED) 

JavaDoc dice:

restituisce lo stato di questo thread. Questo metodo è progettato per l'uso nel monitoraggio dello stato del sistema, non per il controllo della sincronizzazione.

+0

Perché il voto negativo? :( –

Problemi correlati