对不起,令人困惑的标题。不知道如何表达它,这可能是问题!
我正在寻找一个很好的抽象来用于涉及并发线程的情况。
我已经能够接近,但不是很清楚。
稍微简化一下,我在 Android 手机上收集了两种传感器输入 - 方向类型的东西和 WiFi 扫描。
当收集到足够的两者时,我想触发一个使用数据的事件。但是,我不想停在那里——这个过程应该继续 N 次。
起初我只是在条件上使用了while循环,例如
startCollecting();
while (samplesCollected < X){
// wait
while (directionCount < Y || scanCount < Z){};
// then
doSomeStuff();
samplesCollected++;
}
stopCollecting();
但是,SO 告诉我这是一个糟糕的表现,而且我确实遇到了一些 UI 锁定(即使它在不同的线程上),所以我决定使用 java.util.concurrent。
问题是我不能完全确定使用哪个抽象,可能是因为我没有经验。
ReentrantLock 的条件:
条件的想法似乎很棒 - 但我不想控制共享资源 - 我希望数据收集在处理第一批时在后台继续 - 那么我在哪里调用锁定?如果我不锁定,则会引发 IllegalMonitorStateException。
倒计时锁:
看起来很理想 - 当收集线程有可用数据时,它们可以调用 countDown(),并且当 countDown 被调用足够多次时,操作可以继续。但是 countDown 应该是一次性执行,我需要重复几次。
循环障碍:
CountdownLatch 的文档建议如果您希望行为可重复,则应使用 CyclicBarrier - 但 CyclicBarrier 的隐喻在这种情况下似乎完全错误,我不明白如何使用它。
我在下面链接了一些相关问题 - 任何指导将不胜感激。