我在Java中有以下场景:
我的问题是,您将使用哪个(并发)集合来有效地实现此目的?这些事件在资源有限的设备(运行Android的手机)上以100Hz的频率进行。我想过使用以下内容,其中没有一个看起来合适:
以下是一些示例代码:
import java.util.Queue;
import com.google.common.collect.Queues;
public class AccelerometerProcessor implements Runnable {
private static final int WINDOW_SIZE = 128;
private final Queue<AccelerometerEvent> eventQueue = Queues.newConcurrentLinkedQueue();
@Override
public void run() {
while (!Thread.interrupted()) {
try {
synchronized (eventQueue) {
while (eventQueue.size() < WINDOW_SIZE) {
eventQueue.wait();
}
// We have WINDOW_SIZE eventQueue, start processing
}
} catch (InterruptedException e) {
// Do nothing
}
}
}
public void addAccelerometerEvent(AccelerometerEvent accelerometerEvent) {
synchronized (eventQueue) {
eventQueue.add(accelerometerEvent);
eventQueue.notifyAll();
}
}
}
顺便说一下,我也在使用谷歌番石榴,所以如果有一个很好的收藏,我没有听说过,请转介我。
那么:任何好的想法如何有效而干净地解决这个问题?
答案 0 :(得分:1)
如果你总是要消耗WINDOW_SIZE / 2事件 en bloc ,为什么生产者线程(你说只有一个)没有填充一个大小为WINDOW_SIZE / 2的数组并传递它一旦它满了就加入队列?