2010-09-10 123 views
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() 

那么,这个代码不是因为我在run()功能修改myString(在主线程声明)是线程安全的?

+0

你的问题让我想起了很多这篇文章http://blogs.msdn.com/b/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe。 ASPX – 2010-09-10 17:03:34

回答

4

本身就是线程安全的。但是哪个线程将会是读取的值是myString?如果在将它写入新线程后从主线程中读取它,则不是线程安全的。

2

不,如你所说,它是线程安全的。如果你为myString变量创建了一个getter,你就有一个潜在的线程问题。在这种情况下,您希望使getter/setter方法同步,或者更好地使变量volatile,这将确保变量的值对于每个线程都是相同的。