long
次の要件/事実を持つタイプのカウンターが必要です。
- カウンターのインクリメントには、できるだけ時間がかからないようにする必要があります。
- カウンターは1つのスレッドによってのみ書き込まれます。
- カウンターからの読み取りは別のスレッドで行われます。
- カウンターは定期的に(1秒間に数千回も)インクリメントされますが、5秒ごとに1回だけ読み取られます。
- 正確な精度は必須ではありません。カウンターのサイズの大まかなアイデアだけで十分です。
- カウンターがクリアされたり、デクリメントされたりすることはありません。
これらの要件に基づいて、どのようにカウンターを実装することを選択しますか?単純なlong
ものとして、volatile long
またはを使用してAtomicLong
?なんで?
現時点では、私は持ってvolatile long
いますが、別のアプローチがより良いかどうか疑問に思っていました。私はまた、++counter
とは対照的に行うことによって私の長い時間を増やしていcounter++
ます。割り当てが行われていないので、これは本当にもっと効率的ですか(私は他の場所で信じるように導かれています)?