2010-09-10 27 views
7

Je suis en train d'écrire une application pour Android et j'utilise des threads de travail pour traiter certaines informations. Après avoir lu mon code, je ne sais plus si le thread est sûr.Est-ce que ce fil est sûr?

J'ai écrit une version simplifiée de mon code, j'ai omis l'objet Handler utilisé pour communiquer avec le fil conducteur et, évidemment, le processus lui-même.

public class myClass implements Runnable 
{ 
    private String myString; 

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

Ceci est appelé en exécutant quelque chose de similaire à ceci.

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

Alors, est-ce code ne thread-safe parce que je suis en train de modifier myString (déclaré dans le thread principal) dans la fonction run()?

+0

Votre question me rappelle beaucoup de cet article http://blogs.msdn.com/b/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe. aspx –

Répondre

4

En soi, c'est thread-safe. Mais quels threads vont être en lisant la valeur ? Si vous l'avez lu depuis le thread principal après l'avoir écrit dans le nouveau thread, cela signifie que n'est pas thread-safe.

2

Non, comme vous l'avez présenté, il est thread-safe. Si vous créez un accesseur pour la variable myString, vous avez un problème de thread potentiel. Dans ce cas, vous voudrez synchroniser la méthode getter/setter, ou mieux encore rendre la variable volatile, ce qui garantira que la valeur de la variable est la même pour chaque thread.