这个线程安全吗?

时间:2010-09-10 16:18:08

标签: android multithreading thread-safety runnable

我正在为Android编写应用程序,并且正在使用工作线程来处理某些信息。阅读完我的代码后,我现在不确定它是否是线程安全的。

我已经编写了我的代码的简化版本,我省略了用于与主线程进行通信的Handler对象,显然是进程本身。

public class myClass implements Runnable
{
    private String myString;

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

通过运行与此类似的东西来调用它。

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

那么,这段代码是不是线程安全的,因为我在myString函数中修改run()(在主线程中声明)?

2 个答案:

答案 0 :(得分:4)

本身就是线程安全的。但是哪些线程将读取 myString值?如果您在新线程中将其写入后从主线程中读取它,那么不是线程安全的。

答案 1 :(得分:2)

不,正如您所介绍的那样,它是线程安全的。如果为myString变量创建getter,则可能存在线程问题。在这种情况下,您可能希望使getter / setter方法同步,或者更好地使变量变为volatile,这将确保变量的值对于每个线程都是相同的。