練習(xí)心得
- runOnUiThread是Activity的方法销钝,其中的run方法會在UI線程中執(zhí)行,如果是在主線程中調(diào)用則立即執(zhí)行,如果是在異步線程中則將其放入Activity的EventQueue中
- 用volatile修飾的變量如private static volatile int a = 2;是為解決多線程訪問統(tǒng)一變量時的可見性問題(可見性:即保障每個線程獲取的變量值都是最新的一致的,線程同步要解決的3個問題‘原子性’试幽、‘可見性’、‘有序性’)
代碼樣例
/**
* Created by Rambo
*/
public class MyActivity extends MainActivity {
private EditText myEditText = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
myEditText = (EditText) findViewById(R.id.myEditText);
Thread otherThread = new Thread(new Runnable() {
@Override
public void run() {
Log.v(TAG, "otherThread2:" + Thread.currentThread().getName());
for (int index = 0; index < 5; index++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 匿名內(nèi)部類所引用的方法的局部變量要求是final的卦碾,是為防止內(nèi)部類實例的生命周期大于局部變量的情況
// 定義為final后局部變量的生命周期等同域外部類變量
final int finalIndex = index;
/**
* activity的方法铺坞,其中的run方法會在UI線程中執(zhí)行,如果是在主線程中調(diào)用則
* 立即執(zhí)行洲胖,如果是在異步線程中則將其放入Activity的EventQueue中
*/
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.v(TAG, "runOnUiThread:" + Thread.currentThread().getName());
myEditText.setText(Integer.toString(finalIndex));
}
});
}
}
});
otherThread.start();
}
}
執(zhí)行Log日志如下:
運行日志