我正在编写处理实时数据的Android应用。 我的应用程序从数据总线(CAN)读取二进制数据,解析并在屏幕上显示它。 App在后台线程中读取数据。需要快速将数据从一个线程传输到另一个线程。显示数据应该是最实际的。
我找到了几乎实现所需行为的好java队列:LinkedBlockingQueue。我计划为这个队列设置强大的限制(大约100条消息)。
Consumer线程应该使用take()方法从队列中读取数据。但生产者线程不能等待消费者。由于这个原因,它不能使用标准方法put()(因为它阻塞)。
所以,我计划使用以下结构将消息放入队列:
while (!messageQueue.offer(message)) {
messageQueue.poll();
}
也就是说,应该从队列中删除最旧的消息,以便为新的实际数据提供一个位置。
这是一个好习惯吗?或者我丢失了一些重要细节?
答案 0 :(得分:0)
Can't see anything wrong with it. You know what you are doing (loosing the head record). This can't relate to any practice; it's your call to use the api like you want. I personally prefer ArrayBlockingQueue though (less temp objects).
答案 1 :(得分:0)
这应该是您正在寻找的内容:Size-limited queue that holds last N elements in Java
最佳答案是指一个将删除元素的apache lib队列。