I thread si cancellano da soli?

0

Diciamo che stavo lavorando su un'applicazione Swing. La maggior parte viene eseguita su EDT usando SwingUtilities.invokeLater() nel metodo main , perché ho sentito (correggimi se ho torto) che è quello che devi fare con Swing.

Tuttavia, alcune parti di esso non dovrebbero essere eseguite sull'EDT. Queste parti sono parti che richiedono molto tempo per essere completate (presumo che ciò avvenga perché le attività lunghe sull'EDT interferiranno con le operazioni della GUI che l'EDT dovrebbe svolgere, e quindi questi tipi di attività dovrebbero essere eseguiti in parallelo, su un thread diverso. questa ipotesi è corretta?)

Per fare ciò, quando ho bisogno di eseguire un compito che richiede molto tempo per essere completato e quindi non può essere eseguito sull'EDT come il resto del programma, creo un nuovo thread ed eseguo quell'attività al suo interno.

La mia domanda è: quando termina il metodo run() di quel nuovo thread, ovvero il thread termina il suo lavoro. Si elimina da solo? O continua a esistere nella memoria?

    
posta Aviv Cohn 15.03.2014 - 04:10
fonte

1 risposta

2

When the run() method of that new thread finishes, aka the thread finished it's job. Does it delete itself? Or does it keep existing in the memory?

Si elimina principalmente. Lo stack di thread viene eliminato e la mappa locale del thread, il runnable e alcuni altri campi dell'oggetto Thread vengono annullati. Ma l'oggetto Thread continuerà ad esistere fintanto che è raggiungibile. Quindi, se vuoi che tutto scompaia quando il thread termina, non mantenere un riferimento a Thread o Runnable .

Guarda il codice ... se vuoi scoprire esattamente cosa rimane attaccato all'oggetto Thread dopo che il thread termina. È specifico per l'implementazione.

    
risposta data 15.03.2014 - 07:03
fonte

Leggi altre domande sui tag