7

我正在为 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()

4

2 回答 2

4

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

于 2010-09-10T16:23:39.430 回答
2

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

于 2010-09-10T16:24:29.850 回答