2010-11-15 11 views
6

Lascia che ti dia lo scenario.È sicuro conservare un riferimento a un thread in un singleton?

Dire che la mia prima attività che carica, crea anche un thread, che verrà eseguito a tempo indeterminato in background.

Ora, se mi sposto in un'altra attività, presumo che il thread che ho inizialmente creato nell'attività principale continui a funzionare.

Quindi, ora alla mia domanda principale - per gestire questo thread in background da altre attività, è sicuro memorizzare un riferimento a quel thread in un oggetto singleton?

+0

Ho fatto qualcosa di simile in una delle mie app. Non ha avuto problemi Tuttavia, sono passato a TimerTask programmato in seguito. Sembrava più sicuro e facile da usare. –

risposta

4

Sì e no. In teoria, non avrai problemi, ma non devi permettere che i riferimenti scappino.

I problemi possono derivare dal mantenere il riferimento nell'oggetto singleton privato, non deve passare il riferimento a qualcos'altro o consentire l'accesso ad esso da qualcos'altro, oppure può perdere il controllo.

In secondo luogo, il thread creato dalla propria attività non deve consentire l'accesso alle sue variabili membro o consentire l'uscita da riferimenti ad esse.

Un buon libro su questo settore è "Java Concurrency in Practice" di Brian Goetz

+0

+1 per aver stabilito che il singleton deve sempre avere il controllo (non l'attività di origine) –

+0

Ha perfettamente senso - grazie per averlo chiarito. Il thread in questione sarà autonomo e non condividerà nulla. – xil3

2

realtà in cui è necessario stare attenti è se si dispone di più caricatori di classe. Un Singleton è solo un singleton se si sta utilizzando lo stesso programma di caricamento classi per caricare la classe. Se nella propria app sono presenti più programmi di caricamento classi che eseguono le stesse classi, si avrà in ogni caso un'altra istanza del singleton.

La maggior parte delle app standalone utilizza solo un classloader e pertanto non presenta alcun problema. Se hai un solo classloader, starai bene.

+0

+1 un altro modo in cui l'accesso può essere pubblicato/condiviso. – Jaydee

Problemi correlati