首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJava: CountDownLatch永不停歇

RxJava: CountDownLatch永不停歇
EN

Stack Overflow用户
提问于 2016-05-28 08:42:36
回答 1查看 1.1K关注 0票数 3

最近,我正在学习RxJava。我们都知道,当计算到CountDownLatch时,zero会停止。好吧,但是当我在下面运行代码时,CountDownLaych永远不会停止!我试着运行与Java项目相同的代码,可以停止!

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final CountDownLatch latch = new CountDownLatch(5);
    Observable
            .interval(1, TimeUnit.SECONDS)
            .subscribe(new Action1<Long>() {
                @Override
                public void call(Long counter) {
                    latch.countDown();
                    long count = latch.getCount();
                    Log.d(TAG, "call get -> " + counter + ", latch count -> " + count);
                }
            });

    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

在Android中,这些代码的输出如下:

代码语言:javascript
复制
D/MainActivity: call get -> 0, latch count -> 4
D/MainActivity: call get -> 1, latch count -> 3
D/MainActivity: call get -> 2, latch count -> 2
D/MainActivity: call get -> 3, latch count -> 1
D/MainActivity: call get -> 4, latch count -> 0
D/MainActivity: call get -> 5, latch count -> 0
D/MainActivity: call get -> 6, latch count -> 0
D/MainActivity: call get -> 7, latch count -> 0
....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 08:52:01

根据文献资料的说法,锁存在零时不会停止计数。相反:

如果当前计数等于零,那么什么都不会发生。

尝试修改try块如下所示:

代码语言:javascript
复制
Log.d(TAG, "call await");
latch.await();
Log.d(TAG, "released");

我相信,当锁存器达到零时,您肯定会看到线程被释放。如果你想要你的可观察到的停止发出当发生时,那么你将不得不取消订阅它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37496986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档