views:

147

answers:

2

I am writing an application for Android and am using worker threads to process certain information. Having read through my code I am now unsure if it is thread safe.

I have written a simplified version of my code, I have omitted the Handler object used to communicate with the main thread and obviously the process itself.

public class myClass implements Runnable
{
    private String myString;

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

This is called by running something similar to this.

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

So, is this code not thread safe because I am modifying myString (declared in the main thread) in the run() function?

+3  A: 

In itself, that's thread-safe. But which threads are going to be reading the myString value? If you read it from the main thread after writing it in the new thread, that isn't thread-safe.

Jon Skeet
+2  A: 

No, as you have presented it, it is thread safe. If you make a getter for the myString variable, you have a potential threading issue. In that case you would want to make the getter/setter method synchronized, or better yet make the variable volatile, which will ensure that the variable's value is the same for every thread.

Nemi