2010-09-10 162 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,這將確保變量的值對於每個線程都是相同的。