2014-11-25 62 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