您好我正在使用 ConcurrentLinkedQueue 在 Java 中创建移动平均窗口 (MAW) 数据结构。MAW 可以同时被多个线程调用,所以我需要确保我的代码是线程安全的——我能看到的唯一方法是在 add 中有一个同步的代码块(使用队列作为锁)方法:
final Queue<Double> myQ = new ConcurrentLinkedQueue<Double>();
volatile double total;
volatile int count;
在 add 方法中,我有:
synchronized (myQ)
{
if (myQ.offer(value))
{
total += value;
count++;
}
if (size > window)
{
total -= myQ.poll();
count--;
}
movingAvg = total / count;
}
反正我没有看到没有同步代码块?
谢谢