Si non è necessario effettuare una pulizia particolare, a meno che non si disponga di risorse di sistema aperte come i file. Non appena terminano i thread, indipendentemente dal fatto che siano normali o eccezionali, vengono puliti dal sistema operativo o dalla macchina virtuale (stack di thread, ...).
Gli oggetti Thread
vengono recuperati dal semplice GC Java. Generalmente GC eseguirà una raccolta quando stai esaurendo la memoria. Tuttavia, non è deterministico.
Per migliorare l'efficienza della memoria in generale, si potrebbe considerare il refactoring le discussioni che in compiti e un pool di thread, che rade circa un megabyte (cifra approssimativa!) Per thread:
- Un'implementazione di
ExecutorService
esegue attività sui thread. Se si esegue principalmente il lavoro con la CPU piuttosto che l'I/O, è generalmente necessario avere tanti thread quanti sono i core piuttosto che centinaia di thread. Esistono implementazioni esistenti, ma è anche possibile implementare il proprio servizio executor.
- A
Callable<T>
è un'implementazione di attività. Forse molto simile a quello che potresti fare non con gli oggetti Runnable
.
- A
Future<T>
contiene una promessa per un risultato dell'attività.
fonte
2013-05-03 12:28:11
Grazie per la risposta pulita :) – sura2k