2010-11-15 8 views
6

Déjame darte el escenario.¿Es seguro mantener una referencia a un hilo en un singleton?

Diga que mi primera actividad que se carga, también crea un hilo, que se ejecutará indefinidamente en el fondo.

Ahora, si paso a otra actividad, supongo que el hilo que creé inicialmente en la actividad principal continuará ejecutándose.

Entonces, ahora a mi pregunta principal: para administrar este hilo de fondo de otras actividades, ¿es seguro almacenar una referencia a ese hilo en un objeto singleton?

+0

Hice algo similar en una de mis aplicaciones. No tuve ningún problema Sin embargo, cambié a TimerTask programado más tarde. Parecía más seguro y fácil de usar. –

Respuesta

4

Sí y no. Teóricamente, no tendrás ningún problema, pero no debes permitir que las referencias escapen.

Los problemas pueden surgir de mantener la referencia en el singleton objeto privado, no debe pasar la referencia a cualquier otra cosa o permitir el acceso a la misma por cualquier otra cosa, o puede perder el control.

En segundo lugar, el hilo creado por su actividad no debe permitir el acceso a sus variables miembro o permitir que las referencias a ellas escapen.

Un buen libro sobre esta área es "Java concurrencia en la práctica" de Brian Goetz

+0

+1 para estipular que el singleton siempre debe tener el control (no la actividad de origen) –

+0

Tiene perfecto sentido, gracias por aclarar eso. El hilo en cuestión será autónomo y no compartirá nada. – xil3

2

realidad en la que hay que tener cuidado es si usted tiene múltiples cargadores de clases. Un Singleton es solamente un producto único si está utilizando el mismo cargador de clases para cargar la clase. Si usted tiene múltiples cargadores de clases en su aplicación que se ejecutan las mismas clases que tendrá otra instancia del singleton en cada uno.

La mayoría de las aplicaciones autónomas solo usan un cargador de clases y, por lo tanto, no tienen ningún problema. Si solo tienes un cargador de clases, estarás bien.

+0

+1 otra forma potencial de acceso para ser publicado/compartido. – Jaydee

Cuestiones relacionadas