练习心得
- runOnUiThread是Activity的方法,其中的run方法会在UI线程中执行,如果是在主线程中调用则立即执行,如果是在异步线程中则将其放入Activity的EventQueue中
- 用volatile修饰的变量如private static volatile int a = 2;是为解决多线程访问统一变量时的可见性问题(可见性:即保障每个线程获取的变量值都是最新的一致的,线程同步要解决的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();
}
// 匿名内部类所引用的方法的局部变量要求是final的,是为防止内部类实例的生命周期大于局部变量的情况
// 定义为final后局部变量的生命周期等同域外部类变量
final int finalIndex = index;
/**
* activity的方法,其中的run方法会在UI线程中执行,如果是在主线程中调用则
* 立即执行,如果是在异步线程中则将其放入Activity的EventQueue中
*/
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.v(TAG, "runOnUiThread:" + Thread.currentThread().getName());
myEditText.setText(Integer.toString(finalIndex));
}
});
}
}
});
otherThread.start();
}
}
执行Log日志如下:
运行日志
网友评论