RxJava:CountDownLatch 永不停止
RxJava: CountDownLatch never stop
最近在学习RxJava
。我们都知道CountDownLatch
数到zero
就会停止。好吧,但是当我在下面 运行 代码时, CountDownLaych
永远不会停止!我尝试 运行 与 Java 项目相同的代码,可以停止!
@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 Studio 中,这些代码将输出如下:
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
....
根据 the documentation,锁存器不会在零时停止计数。相反:
If the current count equals zero then nothing happens.
尝试将您的 try
块修改为如下所示:
Log.d(TAG, "call await");
latch.await();
Log.d(TAG, "released");
我相信你会看到当你的闩锁达到零时线程被释放。如果您希望您的 Observable 在这种情况发生时停止发射,那么您将不得不取消订阅它。
最近在学习RxJava
。我们都知道CountDownLatch
数到zero
就会停止。好吧,但是当我在下面 运行 代码时, CountDownLaych
永远不会停止!我尝试 运行 与 Java 项目相同的代码,可以停止!
@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 Studio 中,这些代码将输出如下:
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
....
根据 the documentation,锁存器不会在零时停止计数。相反:
If the current count equals zero then nothing happens.
尝试将您的 try
块修改为如下所示:
Log.d(TAG, "call await");
latch.await();
Log.d(TAG, "released");
我相信你会看到当你的闩锁达到零时线程被释放。如果您希望您的 Observable 在这种情况发生时停止发射,那么您将不得不取消订阅它。