我創建了兩個線程在主要活動中操縱共享領域的成員,但價值似乎不是線程更新,因爲變量的值是一樣的,實際上是即時通訊練同步,這裏是我的代碼:安卓:線程不更新值
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