CountDownLatch 使用记录

CountDownLatch是java中用来阻塞当前线程包括主线程(Android中阻塞主线程还是会有anr问题)等待其他线程执行完成后唤醒。

可以阻塞一个以上的线程。

用法:需要阻塞哪个线程就在哪个线程重调用latch.await();方法

初始化时传入的参数代表线程计数,也就是需要等待的线程数,例如需要等待5个线程执行完成后唤醒等待线程,就传5.

线程执行完成后需要调用latch.countDown();方法使计数减一。

使用实例:

 

final CountDownLatch latch=new CountDownLatch(1);
new Thread(new Runnable() {
@Override
public void run() {
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
linearLayout.postDelayed(new Runnable() {
@Override
public void run() {
ToastUtils.showToast(TTTActivity.this,"completed2");
}
},1000);

}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
linearLayout.post(new Runnable() {
@Override
public void run() {
ToastUtils.showToast(TTTActivity.this,"completed1");
}
});

}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5*1000);
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();

 

posted @ 2017-09-07 13:02  小dai  阅读(30)  评论(0)    收藏  举报