如何将以下代码从Java翻译成Python?
AtomicInteger cont = new AtomicInteger(0);
int value = cont.getAndIncrement();
答案 0 :(得分:31)
对于该值的任何使用,最有可能threading.Lock
。除非你使用pypy,否则Python中没有原子修改(如果你这样做,请查看stm版本中的__pypy__.thread.atomic
)。
答案 1 :(得分:24)
itertools.count
返回一个迭代器,它将在每次迭代时执行等效的getAndIncrement()
。
示例:
import itertools
cont = itertools.count()
value = cont.next()
答案 2 :(得分:5)
这将执行相同的功能,虽然它不是无锁和名称' AtomicInteger'意味着。
注意其他方法也不是严格无锁的 - 它们依赖于GIL而不能在python解释器之间移植。
class AtomicInteger():
def __init__(self, value=0):
self._value = value
self._lock = threading.Lock()
def inc(self):
with self._lock:
self._value += 1
return self._value
def dec(self):
with self._lock:
self._value -= 1
return self._value
@property
def value(self):
with self._lock:
return self._value
@value.setter
def value(self, v):
with self._lock:
self._value = v
return self._value