Skip to content

Instantly share code, notes, and snippets.

@piyo7
Created November 27, 2018 03:54
Show Gist options
  • Save piyo7/ef7e4c4ef59d2f96373edb043ede3e19 to your computer and use it in GitHub Desktop.
Save piyo7/ef7e4c4ef59d2f96373edb043ede3e19 to your computer and use it in GitHub Desktop.
スレッドセーフな連想カウンタをリセットしたい人生だった ref: https://qiita.com/piyo7/items/81d1d395733b3cea072c
val counter = TrieMap[Key, LongAdder]()
counter.getOrElseUpdate(key, new LongAdder()).increment()
for (key <- counter.keys) {
val sum = counter.remove(key).sum()
logger.debug(s"$key: $sum")
}
for {
key <- counter.keys
value <- counter.get(key)
} {
val sum = value.sumThenReset()
logger.debug(s"$key: $sum")
}
val counter = TrieMap[Key, AtomicLong]()
for {
key <- counter.keys
value <- counter.get(key)
} {
val v = value.getAndSet(0)
logger.debug(s"$key: $v")
}
for {
key <- counter.keys
value <- counter.get(key)
} {
val v = value.get()
if (v == 0) counter.remove(key)
}
scala> new AtomicLong(0) == new AtomicLong(0)
res0: Boolean = false
public final class AtomicLongMap<K> implements Serializable {
private final ConcurrentHashMap<K, Long> map;
public final class AtomicLongMap<K> {
private final ConcurrentHashMap<K, AtomicLong> map;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment