2010-09-10 13 views
7

Ich schreibe eine Anwendung für Android und verwende Worker-Threads, um bestimmte Informationen zu verarbeiten. Nachdem ich meinen Code gelesen habe, bin ich mir nicht mehr sicher, ob es Thread-sicher ist.Ist dieses Gewinde sicher?

Ich habe eine vereinfachte Version meines Codes geschrieben, ich habe das Handler Objekt weggelassen, das verwendet wurde, um mit dem Hauptthread und natürlich dem Prozess selbst zu kommunizieren.

public class myClass implements Runnable 
{ 
    private String myString; 

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

Dies wird aufgerufen, indem etwas ähnliches ausgeführt wird.

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

So wird fädelt dieser Code nicht sicher, weil ich myString bin Modifizieren (im Hauptthread erklärt) in der run() Funktion?

+0

Ihre Frage erinnert mich sehr an diesen Artikel http://blogs.msdn.com/b/ericlippert/archive/2009/10/19/what-is-thisthing-you-call-thread-safe. aspx –

Antwort

4

In sich ist das Thread-sicher. Aber welche Threads werden lesen der myString Wert? Wenn Sie es aus dem Haupt-Thread lesen, nachdem Sie es in den neuen Thread geschrieben haben, ist nicht thread-safe.

2

Nein, wie Sie es vorgestellt haben, ist es fadensicher. Wenn Sie einen Getter für die Variable myString erstellen, liegt ein potenzielles Threading-Problem vor. In diesem Fall sollten Sie die Getter/Setter-Methode synchronisieren oder besser noch die Variable volatile machen, um sicherzustellen, dass der Wert der Variablen für jeden Thread gleich ist.