2014-11-25 99 views
0

我有以下代碼:訪問變量從一個線程

public class MainActivity extends Activity { 
    public String myString; 

    ... 

    public void updateString() 
    { 
     new Thread() { 
      @Override 
      public void run() { 
       this.myString = "TEST"; 
      } 
     } 
    } 

}

的問題是,我需要從線程更新MyString的,但我不能訪問它。有什麼建議麼?謝謝!

+1

http://www.journaldev.com/1061/java-synchronization-and-thread-safety-tutorial-with-examples看看那個 – 2014-11-25 12:18:41

+0

使用一個布爾值,當真正的變化,例如變量 – 2014-11-26 09:17:02

回答

0

在這種情況下,創建一個自定義類,它可以實現Runnable並將myString作爲參數傳遞給類的構造函數,因此當創建runnable對象時,它將存儲在本地,並可以根據需要從run方法接受。

0

你可以使用getter和setter方法,例如:

公共類MainActivity擴展活動{ 公共字符串myString的;

... 

public void updateString() 
{ 
    new Thread() { 
     @Override 
     public void run() { 
      setMyString("TEST"); 
     } 
    } 
} 

public void setMyString(String myString){ 
    this.myString = myString; 
} 

}

1

可以這樣做使串全球和更新。

public class MainActivity extends Activity { 
    public String myString; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     updateString(); 
    } 

    public void updateString() 
    { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       for(int i=0; i<10;i++){ 

        myString=String.valueOf(i); 

        //log 
        Log.d("myString:",myString); 
       } 

      } 
     }).start(); 

    } 
+0

不應該是'volatile'嗎? – EpicPandaForce 2014-11-25 12:38:34

+0

你也可以聲明它爲volatile。 – H4SN 2014-11-25 13:49:14