Wie verwende ich Scala synchronisiert?

Ich habe den folgenden Code:

object Foo {
 private var ctr = 0L

 def bar = {
   ctr = ctr + 1
   // do something with ctr
 }
}

Voraussetzung ist, dass einctr value sollte nur einmal verwendet werden. In meinem Fall der gleiche Wert vonctr wird wiederverwendet. Meine Theorie ist, dass dies passiert, weilFoo.bar wird gleichzeitig in verschiedenen Threads aufgerufen (dies ist die einzige Schlussfolgerung, die ich ziehen konnte). Ich habe den folgenden geänderten Code als Fix.

object Foo {
 private var ctr = 0L
 def getCtr = synchronized{
   ctr = ctr + 1
   ctr
 }
 def bar = {
   val currCtr = getCtr
   // do something with currCtr
 }
}

Ich konnte keinen guten Leitfaden für die Verwendung des @ findsynchronized -Methode in Scala. Kann mir jemand mitteilen, ob der obige Code mein Problem behebt.

EDIT: Basierend auf den Kommentaren unten denke ich,AtomicLong ist die beste Lösung für mich:

import java.util.concurrent.atomic.AtomicLong
private val ctr = new AtomicLong
def getCtr = ctr.incrementAndGet

Antworten auf die Frage(2)

Ihre Antwort auf die Frage