2011-11-18 12 views
5

Voglio sapere in Java:In Java se un thread è stato ucciso, cosa succederà all'altro thread?

  1. Se thread principale è stato ucciso che cosa accadrà ad altri thread per bambini?
  2. Se il thread secondario viene ucciso, cosa succederà ai fratelli e al thread principale?

Ho letto nel seguente link che poiché i thread condividono lo spazio indirizzo, uccidere un thread può influire anche su altri thread.

Di seguito è riportato un preventivo da here.

I fili sono processi leggeri che dividono il flusso principale di controllo in più flussi e ciascun flusso di controllo/filo verrà eseguito indipendentemente. L'attività del processo in un sistema è rappresentata da thread. Il processo che ha più thread è chiamato multi thread. Ogni thread ha il suo ID di thread (tipo di dati intero), registro, contatore di programma, stack, errore n. I thread possono comunicare utilizzando la memoria condivisa all'interno dello stesso processo. Ci sono diversi vantaggi nell'usare i thread per gestire e mantenere la sottoattività delle applicazioni. Quando utilizziamo i thread, meno risorse di sistema vengono utilizzate per il cambio di contesto e aumentato il throughput dell'applicazione. I thread semplificano anche la struttura del programma. Non esiste un meccanismo speciale per la comunicazione tra le attività. I thread presentano inoltre alcuni svantaggi, ad esempio i thread non sono riutilizzabili poiché dipendono da un processo e non possono essere separati dal processo. I thread non sono isolati in quanto non hanno il loro spazio indirizzo. La causa dell'errore da parte del thread può uccidere l'intero processo o programma poiché tale errore influisce sull'intero spazio di memoria di tutti i thread utilizzati in quel processo o programma. A causa delle risorse condivise da parte dei thread con il processo, può anche influire sull'intero processo o programma quando un danno alla risorsa da parte del thread. Per l'accesso simultaneo in lettura e scrittura al thread di memoria verranno richieste le sincronizzazioni. I dati del processo possono facilmente danneggiare il thread attraverso la corsa dei dati perché tutti i thread con il processo hanno accesso in scrittura allo stesso pezzo di dati.

Can u gys informi se tutto ciò che ha detto nel link qui sopra è applicabile a java

risposta

10

1) Non succederà nulla ai "fili bambino" ...

2) Nulla accadrà a i "fili di pari livello" ...

... con la seguente eccezione: se tutti i thread rimanenti sono thread daemon, l'applicazione verrà terminata (cioè, quando rimarranno solo i thread daemon, anche questi verranno uccisi) .

Dal documentation of Thread:

[...] La Java Virtual Machine continua ad eseguire le discussioni fino a quando una delle seguenti situazioni:

  • Il metodo di uscita di classe Runtime è stato chiamato [ ...]
  • Tutti i thread che non sono thread daemon sono morti, restituendo dalla chiamata al metodo di esecuzione o lanciando un'eccezione che si propaga oltre il metodo di esecuzione.
+0

grazie per la rapida risposta. Ho ancora un dubbio sul punto 2. Ho letto nel seguente link che, poiché i thread condividono lo spazio degli indirizzi, uccidere un thread può influenzare anche altri thread. In attesa della risposta http://www.blurtit.com/q236205.html – nantitv

+1

A) Il rant è completamente sbagliato quando dice "* I thread semplificano anche la struttura del programma *", e nulla di ciò che afferma in seguito può riparare quel miserabile condanna, frase. B) Non penso che si applichi a Java. C) Non uccidere i thread in modo esplicito (utilizzando Thread.stop). Il metodo Thread.stop è deprecato per ottime ragioni. – aioobe

+0

La discussione aiuta un programma a gestire diversi compiti nello stesso tempo. Il metodo Thread.stop() è deprecato perché non è sicuro (pensate se il thread sta gestendo alcuni dati importanti). Meglio fermarlo con una condizione booleana in un ciclo while nel metodo run(). –

0

Niente, in entrambi i casi. I thread sono indipendenti l'uno dall'altro e non esistono thread come "genitore" o "figlio" in questo senso. Il processo continuerà a essere eseguito fino a quando non ci sono thread in esecuzione.

Un processo è semplicemente un contenitore che contiene alcuni thread. I thread eseguono il codice. Se è presente un thread o più in esecuzione all'interno di un contenitore del processo, il processo continuerà ad esistere. Non c'è una relazione simbiotica tra i fili, uccidendone uno non ne uccidiamo un altro.

Problemi correlati