Как использовать синхронизированный в Scala?
У меня есть следующий код:
object Foo {
private var ctr = 0L
def bar = {
ctr = ctr + 1
// do something with ctr
}
}
Требование заключается в том, чтоctr
Значение следует использовать только один раз. В моем случае одинаковое значениеctr
становится повторно Моя теория заключается в том, что это происходит потому, чтоFoo.bar
вызывается одновременно в разных темах (это единственный вывод, который я могу сделать). У меня есть следующий модифицированный код в качестве исправления.
object Foo {
private var ctr = 0L
def getCtr = synchronized{
ctr = ctr + 1
ctr
}
def bar = {
val currCtr = getCtr
// do something with currCtr
}
}
Я не мог найти хорошее руководство по использованиюsynchronized
метод в Скала. Может кто-нибудь, дайте мне знать, если вышеуказанный код решит мою проблему.
РЕДАКТИРОВАТЬ: Основываясь на комментариях ниже, я думаю,AtomicLong
это лучшее решение для меня:
import java.util.concurrent.atomic.AtomicLong
private val ctr = new AtomicLong
def getCtr = ctr.incrementAndGet