Web サーバーの統計を収集するグローバル オブジェクトを実装する必要があります。methodを持つStatistics
シングルトンがありaddSample(long sample)
、その後 を呼び出しますupdateMax
。これは明らかにスレッドセーフでなければなりません。統計全体の最大値を更新するこの方法があります。
AtomicLong max;
private void updateMax(long sample) {
while (true) {
long curMax = max.get();
if (curMax < sample) {
boolean result = max.compareAndSet(curMax, sample);
if (result) break;
} else {
break;
}
}
}
この実装は正しいですか?シンプルよりも速いと思うので、私はjava.util.concurrentを使用していますsynchronized
。これを実装するための他の/より良い方法はありますか?