我正在为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()
(在主线程中声明)?
答案 0 :(得分:4)
本身就是线程安全的。但是哪些线程将读取 myString
值?如果您在新线程中将其写入后从主线程中读取它,那么不是线程安全的。
答案 1 :(得分:2)
不,正如您所介绍的那样,它是线程安全的。如果为myString变量创建getter,则可能存在线程问题。在这种情况下,您可能希望使getter / setter方法同步,或者更好地使变量变为volatile,这将确保变量的值对于每个线程都是相同的。