我创建了两个线程在主要活动中操纵共享领域的成员,但价值似乎不是线程更新,因为变量的值是一样的,实际上是即时通讯练同步,这里是我的代码:安卓:线程不更新值
public class ActMain extends Activity {
Handler handler;
Integer THREAD_COUNTER = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_act_main);
Message m = new Message();
Bundle b = new Bundle();
b.putInt("what", 5);
m.setData(b);
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i =0; i < 10; i++){
add();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 30; i++){
subtract();
}
}
});
t1.start();
t2.start();
Log.i("MainActivity " , " thread counter" + THREAD_COUNTER);
//same value 10 of THREAD_COUNTER
这意味着我们可以指示其他线程等待,直到第一个线程完成加入,然后开始执行,同时我们还强制日志只显示第二个线程完成时,我们做t2.join();我们是否暂停主线程? – blackHawk
也首先我做了t1.join,然后log1然后t2.join然后log2,有时我得到正确的执行t1-> log1-> t2-> log2有时t1-> t2-> log1-> log2,为什么它发生,有时也有t2-> t1-> log1-> log2 – blackHawk
因为线程是同步的。即使您先运行t1.join(),t2也可以完成_before_ t1。您希望通过线程操作获得的控制越多,就越像是线程化程序。您不必担心哪个线程先运行或先完成。 @黑鹰 – Gray