Android那些好用的API — CountDownLatch

前言

最近有点忙,上月也没有更新,以后补上。

平常资源搜索和看一些代码中,总是会发现一些好用却不常用的API,这里就当一个博客系列来分享一下,可能会断断续续,但会一直持续。

正题

简介

今天要分享的是CountDownLatch。

在使用这个API之前,我们经常使用synchronized,wait和Lock之类来保证线程同步,synchronized使用起来没啥问题。但在同一个区域块中使用保证线程同步,则会多使用wait和lock,使用它们的时候就要注意同一对象、try catch和在synchronized(obj) {…}中执行,用起来不太顺心。但使用了CountDownLatch,就会发现事情都变的简单了。

CountDownLatch用法

例子:

CountDownLatch countDownLatch = new CountDownLatch(1);
HttpBaseDownload.getDownloadUrl(url.toStringUrl(), address -> {
    imgUrl = address;
    countDownLatch.countDown();
});
try {
    countDownLatch.await();
} catch (Exception e) {
    e.printStackTrace();
}

这里使用了CountDownLatch,利用countDownLatch.await()将当前线程锁住,再使用countDownLatch.countDown()将线程释放。

注意

这里需要注意的是new CountDownLatch(1):

正常情况下只要1就可以满足使用了

在1的情况下,await调用一次进入锁状态,countDown调用一次就释放锁。

如果数量为0,当前锁无效,不管await调用几次,都锁不住。

如果数量为n,大于1,则调用一次await,需要调用n次countDown,才能解锁。

顾名思义,CountDown即限定down的次数。

 

你可能感兴趣的:(工具,Android)