2010-09-10 667 views
7

Estoy escribiendo una aplicación para Android y estoy usando subprocesos de trabajo para procesar cierta información. Después de leer mi código, ahora no estoy seguro si es seguro para subprocesos.¿Es seguro este subproceso?

He escrito una versión simplificada de mi código, he omitido el objeto Handler utilizado para comunicarse con el hilo principal y, obviamente, el proceso en sí.

public class myClass implements Runnable 
{ 
    private String myString; 

    @Override 
    public void run() 
    { 
     myString = "Some Value"; 
    } 
} 

Esto se denomina al ejecutar algo similar a esto.

myClass class = new myClass(); 
Thread thread = new Thread(class); 
thread.start() 

Por lo tanto, este código no es hilo de seguridad porque yo estoy modificando myString (declarada en el hilo principal) en la función run()?

+0

Su pregunta me recuerda mucho a este artículo http://blogs.msdn.com/b/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe. aspx –

Respuesta

4

En sí mismo, es seguro para subprocesos. ¿Pero qué hilos van a ser leyendo el valor myString? Si lo lee desde el hilo principal después de escribirlo en el nuevo hilo, ese no es thread-safe.

2

No, como lo ha presentado, es seguro para subprocesos. Si obtiene un getter para la variable myString, tiene un problema potencial de enhebrado. En ese caso, desearía sincronizar el método getter/setter, o mejor aún, hacer que la variable sea volátil, lo que asegurará que el valor de la variable sea el mismo para cada thread.

Cuestiones relacionadas