2010-11-15 9 views
6

Pozwól mi podać scenariusz.Czy bezpiecznie jest zachować odniesienie do wątku w singleton?

Załóżmy, że moja pierwsza aktywność, która się wczytuje, tworzy również wątek, który będzie działał w tle w nieskończoność.

Teraz, jeśli przejdę do innej czynności, zakładam, że wątek, który początkowo utworzyłem w głównym działaniu, będzie nadal działał.

Tak więc, teraz na moje główne pytanie - aby zarządzać tym wątkiem w tle z innych działań, czy można bezpiecznie przechowywać odniesienie do tego wątku w obiekcie singleton?

+0

Zrobiłem coś podobnego w jednej z moich aplikacji. Nie miałem żadnych problemów. Chociaż później przełączyłem się na zaplanowany TimerTask. Wydawało się bezpieczniejsze i łatwiejsze w użyciu. –

Odpowiedz

4

Tak i nie. Teoretycznie nie będziesz miał problemu, ale nie możesz pozwolić, aby odnośniki mogły uciec.

Problemy mogą wynikać z zachowania odniesienia w obiekcie singleton jako prywatnego, nie wolno przekazywać odniesienia do niczego innego ani zezwalać na dostęp do niego przez nic innego, lub może on stracić kontrolę.

Po drugie, wątek utworzony przez twoją aktywność nie może zezwalać na dostęp do zmiennych jej członków ani zezwalać na odwoływanie się do nich.

Dobra książka na tym obszarze jest „Java współbieżności w praktyce” przez Brian Goetz

+0

+1 za zastrzeżenie, że singleton musi zawsze mieć kontrolę (nie jest to inicjująca aktywność). –

+0

Ma doskonały sens - dzięki za wyczyszczenie tego. Wątek, o którym mowa, będzie niezależny i nie będzie niczego współużytkowany. – xil3

2

Właściwie gdzie trzeba uważać, to jeśli masz wiele ładowarki klasy. Singleton jest tylko pojedynczym, jeśli używasz tego samego programu ładującego klasę do załadowania klasy. Jeśli masz wiele programów ładujących klasy w swojej aplikacji z tymi samymi klasami, będziesz mieć kolejne wystąpienie singletonu w każdej z nich.

Większość autonomicznych aplikacji korzysta tylko z jednego programu ładującego klasy i dlatego nie ma żadnych problemów. Jeśli masz tylko jeden program ładujący klasy, wszystko będzie w porządku.

+0

+1 inny możliwy sposób publikowania/udostępniania dostępu. – Jaydee

Powiązane problemy