我的博客原文地址
在Android中我们可以使用CountDownLatch来进行线程的同步。它维护一个计数器,等待CountDownLatch的线程必须等到计数器为0时才可以继续。
我们可以在下面的场景中使用:在某个Thread使用的变量必须等UI线程中对它更新以后才可以使用。
CountDownLatch mLatchTest;
private static final int GET_TEST_MSG = 100;
private boolean mTestFlag = false;
final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == GET_TEST_MSG) {
//do something in ui thread
mTestFlag = true;
mLatchTest.countDown();
}
}
};
public void testThread(View v){
mTestFlag = false;
new Thread(new Runnable() {
@Override
public void run() {
Log.e("Test","Time = "+ SystemClock.uptimeMillis() +", mTestFlag = "+mTestFlag);
mLatchTest = new CountDownLatch(1);
mHandler.sendMessage(mHandler.obtainMessage(GET_TEST_MSG));
try {
mLatchTest.await();
} catch (InterruptedException e) {
e.printStackTrace();
return ;
}
Log.e("Test","Time = "+ SystemClock.uptimeMillis() +", mTestFlag = "+mTestFlag);
}
}).start();
}