Java 实时采样模式

Java 实时采样模式,java,multithreading,concurrency,thread-safety,sampling,Java,Multithreading,Concurrency,Thread Safety,Sampling,我有一个传感器,它在随机时间以高频接收数据,我需要一个指定大小的滚动时间序列窗口(例如60个数据点)以指定频率(例如每秒1个数据点) 采样值应为从传感器读取的最新值(即读取之间的所有其他值应丢弃) 我假设某种生产者-消费者模式在这里是合适的,但由于我缺乏并发性方面的经验,所以我正在努力寻找一个适当而高效的实现 当我想使用生成的所有数据时,我知道ArrayBlockingQueue是一种很好的数据结构可供选择,但在这种情况下,我只想使用生成的最新值(或者如果没有生成值,则使用前一个周期的值),并且

我有一个传感器,它在随机时间以高频接收数据,我需要一个指定大小的滚动时间序列窗口(例如60个数据点)以指定频率(例如每秒1个数据点)

采样值应为从传感器读取的最新值(即读取之间的所有其他值应丢弃)

我假设某种生产者-消费者模式在这里是合适的,但由于我缺乏并发性方面的经验,所以我正在努力寻找一个适当而高效的实现


当我想使用生成的所有数据时,我知道
ArrayBlockingQueue
是一种很好的数据结构可供选择,但在这种情况下,我只想使用生成的最新值(或者如果没有生成值,则使用前一个周期的值),并且使用频率正好是指定的(例如每秒一次)。

简单回答,使用循环队列

//init
int i = 0; 
final int N = 60;
Point[] data=new Point[N];
for(i=0;i<N;i++)data[i]=new Point();//dummy points to start with

//update
void addPoint(Point p){
   data[i] = p;
   i = (i+1)%N;
}
//初始化
int i=0;
最终整数N=60;
点[]数据=新点[N];

对于(i=0;iSo),对于过去60秒中的每一秒,是否希望在该秒内接收到最新的采样值?