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?
To test if the combination of two methods, a and b, is thread-safe, call them from two different threads. Put the complete test in a while loop iterating over all thread interleavings with the help from the class AllInterleavings from vmlens. Test if the result is either an after b or b after a.
A MessageService object is effectively immutable since its state can't change after its construction. So, it's thread-safe. Moreover, if MessageService were actually mutable, but multiple threads only have read-only access to it, it's thread-safe as well.
A threadsafe function protects shared resources from concurrent access by locks. Thread safety concerns only the implementation of a function and does not affect its external interface. In C language, local variables are dynamically allocated on the stack.
Answer: Since String is immutable in Java, it's inherently thread-safe.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With