こんにちは、ConcurrentLinkedQueue を使用して Java で移動平均ウィンドウ (MAW) データ構造を作成しています。MAW は複数のスレッドから同時に呼び出される可能性があるため、自分のコードがスレッド セーフであることを確認する必要があります。方法:
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;
}
とにかく、同期されたコードブロックがないことはわかりませんか?
ありがとう