Files
Android-pyApi/android_pyapi/java/util_concurrent_atomic.py
T
shuiyu1123 a51854455b feat: 大规模扩充至212个模块/175K行代码 — 覆盖android/java/javax/org/dalvik全包
- android/ 167个模块 (app/content/os/view/widget/graphics/media/hardware/net/telephony/provider等)
- java/ 35个模块 (lang/io/util/net/nio/security/crypto/sql/beans/rmi/awt等)
- javax/ 4个模块 (net/crypto/security/sql)
- org/ 5个模块 (json/w3c_dom/xml_sax/xml_pull/apache_http)
- dalvik/ 1个模块 (system)
- ~3053个类/接口,方法签名完全对齐Android SDK
- 桌面跨平台运行 (Windows/macOS/Linux)
- 修复所有导入错误和Python关键字冲突
2026-06-24 14:15:56 +00:00

1044 lines
28 KiB
Python

"""
Java java.util.concurrent.atomic standard library APIs implemented in Python.
java.util.concurrent.atomic package - AtomicBoolean, AtomicInteger, AtomicLong, etc.
"""
from __future__ import annotations
from .._core import Stub
from ..java.lang import RuntimeException
import threading as _threading
import math as _py_math
__all__ = [
"AtomicBoolean", "AtomicInteger", "AtomicLong", "AtomicReference",
"AtomicIntegerArray", "AtomicLongArray", "AtomicReferenceArray",
"AtomicIntegerFieldUpdater", "AtomicLongFieldUpdater",
"AtomicReferenceFieldUpdater",
"AtomicMarkableReference", "AtomicStampedReference",
"DoubleAccumulator", "DoubleAdder",
"LongAccumulator", "LongAdder", "Striped64",
]
# ============================================================
# AtomicBoolean
# ============================================================
class AtomicBoolean(Stub):
"""java.util.concurrent.atomic.AtomicBoolean"""
def __init__(self, initial_value=False):
super().__init__()
self._lock = _threading.Lock()
self._value = bool(initial_value)
def get(self):
with self._lock:
return self._value
def set(self, new_value):
with self._lock:
self._value = bool(new_value)
def lazySet(self, new_value):
self.set(new_value)
def getAndSet(self, new_value):
with self._lock:
old = self._value
self._value = bool(new_value)
return old
def compareAndSet(self, expect, update):
with self._lock:
if self._value == expect:
self._value = update
return True
return False
def weakCompareAndSet(self, expect, update):
return self.compareAndSet(expect, update)
def toString(self):
return str(self._value)
def hashCode(self):
return hash(self._value)
def equals(self, other):
if not isinstance(other, AtomicBoolean):
return False
return self._value == other._value
# ============================================================
# AtomicInteger
# ============================================================
class AtomicInteger(Stub):
"""java.util.concurrent.atomic.AtomicInteger"""
def __init__(self, initial_value=0):
super().__init__()
self._lock = _threading.Lock()
self._value = int(initial_value)
def get(self):
with self._lock:
return self._value
def set(self, new_value):
with self._lock:
self._value = int(new_value)
def lazySet(self, new_value):
self.set(new_value)
def getAndSet(self, new_value):
with self._lock:
old = self._value
self._value = int(new_value)
return old
def compareAndSet(self, expect, update):
with self._lock:
if self._value == expect:
self._value = int(update)
return True
return False
def weakCompareAndSet(self, expect, update):
return self.compareAndSet(expect, update)
def getAndIncrement(self):
with self._lock:
old = self._value
self._value += 1
return old
def getAndDecrement(self):
with self._lock:
old = self._value
self._value -= 1
return old
def getAndAdd(self, delta):
with self._lock:
old = self._value
self._value += delta
return old
def incrementAndGet(self):
with self._lock:
self._value += 1
return self._value
def decrementAndGet(self):
with self._lock:
self._value -= 1
return self._value
def addAndGet(self, delta):
with self._lock:
self._value += delta
return self._value
def getAndUpdate(self, update_func):
with self._lock:
old = self._value
self._value = update_func.applyAsInt(old)
return old
def updateAndGet(self, update_func):
with self._lock:
self._value = update_func.applyAsInt(self._value)
return self._value
def getAndAccumulate(self, x, accumulator_func):
with self._lock:
old = self._value
self._value = accumulator_func.applyAsInt(old, x)
return old
def accumulateAndGet(self, x, accumulator_func):
with self._lock:
self._value = accumulator_func.applyAsInt(self._value, x)
return self._value
def toString(self):
return str(self.get())
def intValue(self):
return self.get()
def longValue(self):
return self.get()
def floatValue(self):
return float(self.get())
def doubleValue(self):
return float(self.get())
def hashCode(self):
return self.get()
# ============================================================
# AtomicLong
# ============================================================
class AtomicLong(Stub):
"""java.util.concurrent.atomic.AtomicLong"""
def __init__(self, initial_value=0):
super().__init__()
self._lock = _threading.Lock()
self._value = int(initial_value)
def get(self):
with self._lock:
return self._value
def set(self, new_value):
with self._lock:
self._value = int(new_value)
def lazySet(self, new_value):
self.set(new_value)
def getAndSet(self, new_value):
with self._lock:
old = self._value
self._value = int(new_value)
return old
def compareAndSet(self, expect, update):
with self._lock:
if self._value == expect:
self._value = int(update)
return True
return False
def weakCompareAndSet(self, expect, update):
return self.compareAndSet(expect, update)
def getAndIncrement(self):
with self._lock:
old = self._value
self._value += 1
return old
def getAndDecrement(self):
with self._lock:
old = self._value
self._value -= 1
return old
def getAndAdd(self, delta):
with self._lock:
old = self._value
self._value += delta
return old
def incrementAndGet(self):
with self._lock:
self._value += 1
return self._value
def decrementAndGet(self):
with self._lock:
self._value -= 1
return self._value
def addAndGet(self, delta):
with self._lock:
self._value += delta
return self._value
def getAndUpdate(self, update_func):
with self._lock:
old = self._value
self._value = update_func.applyAsLong(old)
return old
def updateAndGet(self, update_func):
with self._lock:
self._value = update_func.applyAsLong(self._value)
return self._value
def getAndAccumulate(self, x, accumulator_func):
with self._lock:
old = self._value
self._value = accumulator_func.applyAsLong(old, x)
return old
def accumulateAndGet(self, x, accumulator_func):
with self._lock:
self._value = accumulator_func.applyAsLong(self._value, x)
return self._value
def toString(self):
return str(self.get())
def intValue(self):
return int(self.get())
def longValue(self):
return self.get()
def floatValue(self):
return float(self.get())
def doubleValue(self):
return float(self.get())
def hashCode(self):
return hash(self.get())
# ============================================================
# AtomicReference
# ============================================================
class AtomicReference(Stub):
"""java.util.concurrent.atomic.AtomicReference"""
def __init__(self, initial_value=None):
super().__init__()
self._lock = _threading.Lock()
self._value = initial_value
def get(self):
with self._lock:
return self._value
def set(self, new_value):
with self._lock:
self._value = new_value
def lazySet(self, new_value):
self.set(new_value)
def getAndSet(self, new_value):
with self._lock:
old = self._value
self._value = new_value
return old
def compareAndSet(self, expect, update):
with self._lock:
if self._value is expect or (self._value == expect):
self._value = update
return True
return False
def weakCompareAndSet(self, expect, update):
return self.compareAndSet(expect, update)
def getAndUpdate(self, update_func):
with self._lock:
old = self._value
self._value = update_func.apply(old)
return old
def updateAndGet(self, update_func):
with self._lock:
self._value = update_func.apply(self._value)
return self._value
def getAndAccumulate(self, x, accumulator_func):
with self._lock:
old = self._value
self._value = accumulator_func.apply(old, x)
return old
def accumulateAndGet(self, x, accumulator_func):
with self._lock:
self._value = accumulator_func.apply(self._value, x)
return self._value
def toString(self):
return str(self.get())
def hashCode(self):
return hash(self._value)
# ============================================================
# AtomicIntegerArray
# ============================================================
class AtomicIntegerArray(Stub):
"""java.util.concurrent.atomic.AtomicIntegerArray"""
def __init__(self, length_or_array):
super().__init__()
if isinstance(length_or_array, int):
self._array = [0] * length_or_array
else:
self._array = list(length_or_array)
self._lock = _threading.Lock()
def length(self):
return len(self._array)
def get(self, i):
with self._lock:
return self._array[i]
def set(self, i, new_value):
with self._lock:
self._array[i] = int(new_value)
def lazySet(self, i, new_value):
self.set(i, new_value)
def getAndSet(self, i, new_value):
with self._lock:
old = self._array[i]
self._array[i] = int(new_value)
return old
def compareAndSet(self, i, expect, update):
with self._lock:
if self._array[i] == expect:
self._array[i] = int(update)
return True
return False
def weakCompareAndSet(self, i, expect, update):
return self.compareAndSet(i, expect, update)
def getAndIncrement(self, i):
with self._lock:
old = self._array[i]
self._array[i] += 1
return old
def getAndDecrement(self, i):
with self._lock:
old = self._array[i]
self._array[i] -= 1
return old
def getAndAdd(self, i, delta):
with self._lock:
old = self._array[i]
self._array[i] += delta
return old
def incrementAndGet(self, i):
with self._lock:
self._array[i] += 1
return self._array[i]
def decrementAndGet(self, i):
with self._lock:
self._array[i] -= 1
return self._array[i]
def addAndGet(self, i, delta):
with self._lock:
self._array[i] += delta
return self._array[i]
def toString(self):
return str(self._array)
# ============================================================
# AtomicLongArray
# ============================================================
class AtomicLongArray(Stub):
"""java.util.concurrent.atomic.AtomicLongArray"""
def __init__(self, length_or_array):
super().__init__()
if isinstance(length_or_array, int):
self._array = [0] * length_or_array
else:
self._array = list(length_or_array)
self._lock = _threading.Lock()
def length(self):
return len(self._array)
def get(self, i):
with self._lock:
return self._array[i]
def set(self, i, new_value):
with self._lock:
self._array[i] = int(new_value)
def lazySet(self, i, new_value):
self.set(i, new_value)
def getAndSet(self, i, new_value):
with self._lock:
old = self._array[i]
self._array[i] = int(new_value)
return old
def compareAndSet(self, i, expect, update):
with self._lock:
if self._array[i] == expect:
self._array[i] = int(update)
return True
return False
def weakCompareAndSet(self, i, expect, update):
return self.compareAndSet(i, expect, update)
def getAndIncrement(self, i):
with self._lock:
old = self._array[i]
self._array[i] += 1
return old
def getAndDecrement(self, i):
with self._lock:
old = self._array[i]
self._array[i] -= 1
return old
def getAndAdd(self, i, delta):
with self._lock:
old = self._array[i]
self._array[i] += delta
return old
def incrementAndGet(self, i):
with self._lock:
self._array[i] += 1
return self._array[i]
def decrementAndGet(self, i):
with self._lock:
self._array[i] -= 1
return self._array[i]
def addAndGet(self, i, delta):
with self._lock:
self._array[i] += delta
return self._array[i]
def toString(self):
return str(self._array)
# ============================================================
# AtomicReferenceArray
# ============================================================
class AtomicReferenceArray(Stub):
"""java.util.concurrent.atomic.AtomicReferenceArray"""
def __init__(self, length_or_array):
super().__init__()
if isinstance(length_or_array, int):
self._array = [None] * length_or_array
else:
self._array = list(length_or_array)
self._lock = _threading.Lock()
def length(self):
return len(self._array)
def get(self, i):
with self._lock:
return self._array[i]
def set(self, i, new_value):
with self._lock:
self._array[i] = new_value
def lazySet(self, i, new_value):
self.set(i, new_value)
def getAndSet(self, i, new_value):
with self._lock:
old = self._array[i]
self._array[i] = new_value
return old
def compareAndSet(self, i, expect, update):
with self._lock:
if self._array[i] is expect or self._array[i] == expect:
self._array[i] = update
return True
return False
def weakCompareAndSet(self, i, expect, update):
return self.compareAndSet(i, expect, update)
def toString(self):
return str(self._array)
# ============================================================
# AtomicMarkableReference
# ============================================================
class AtomicMarkableReference(Stub):
"""java.util.concurrent.atomic.AtomicMarkableReference"""
def __init__(self, initial_ref, initial_mark):
super().__init__()
self._lock = _threading.Lock()
self._reference = initial_ref
self._mark = bool(initial_mark)
def getReference(self):
with self._lock:
return self._reference
def isMarked(self):
with self._lock:
return self._mark
def get(self):
with self._lock:
return [self._reference, self._mark]
def attemptMark(self, expected_reference, new_mark):
with self._lock:
if self._reference is expected_reference or self._reference == expected_reference:
self._mark = bool(new_mark)
return True
return False
def compareAndSet(self, expected_reference, new_reference,
expected_mark, new_mark):
with self._lock:
if (self._reference is expected_reference or self._reference == expected_reference):
if self._mark == expected_mark:
self._reference = new_reference
self._mark = bool(new_mark)
return True
return False
def weakCompareAndSet(self, expected_reference, new_reference,
expected_mark, new_mark):
return self.compareAndSet(expected_reference, new_reference,
expected_mark, new_mark)
# ============================================================
# AtomicStampedReference
# ============================================================
class AtomicStampedReference(Stub):
"""java.util.concurrent.atomic.AtomicStampedReference"""
def __init__(self, initial_ref, initial_stamp):
super().__init__()
self._lock = _threading.Lock()
self._reference = initial_ref
self._stamp = int(initial_stamp)
def getReference(self):
with self._lock:
return self._reference
def getStamp(self):
with self._lock:
return self._stamp
def get(self):
with self._lock:
return [self._reference, self._stamp]
def attemptStamp(self, expected_reference, new_stamp):
with self._lock:
if self._reference is expected_reference or self._reference == expected_reference:
self._stamp = int(new_stamp)
return True
return False
def compareAndSet(self, expected_reference, new_reference,
expected_stamp, new_stamp):
with self._lock:
if (self._reference is expected_reference or self._reference == expected_reference):
if self._stamp == expected_stamp:
self._reference = new_reference
self._stamp = int(new_stamp)
return True
return False
def weakCompareAndSet(self, expected_reference, new_reference,
expected_stamp, new_stamp):
return self.compareAndSet(expected_reference, new_reference,
expected_stamp, new_stamp)
# ============================================================
# Field Updaters
# ============================================================
class AtomicIntegerFieldUpdater(Stub):
"""java.util.concurrent.atomic.AtomicIntegerFieldUpdater"""
def __init__(self, tclass, field_name):
super().__init__()
self._tclass = tclass
self._field_name = field_name
@staticmethod
def newUpdater(tclass, field_name):
return AtomicIntegerFieldUpdater(tclass, field_name)
def get(self, obj):
return getattr(obj, self._field_name, 0)
def set(self, obj, new_value):
setattr(obj, self._field_name, int(new_value))
def lazySet(self, obj, new_value):
self.set(obj, new_value)
def getAndSet(self, obj, new_value):
old = self.get(obj)
self.set(obj, new_value)
return old
def compareAndSet(self, obj, expect, update):
if self.get(obj) == expect:
self.set(obj, update)
return True
return False
def weakCompareAndSet(self, obj, expect, update):
return self.compareAndSet(obj, expect, update)
def getAndIncrement(self, obj):
old = self.get(obj)
self.set(obj, old + 1)
return old
def getAndDecrement(self, obj):
old = self.get(obj)
self.set(obj, old - 1)
return old
def getAndAdd(self, obj, delta):
old = self.get(obj)
self.set(obj, old + delta)
return old
def incrementAndGet(self, obj):
val = self.get(obj) + 1
self.set(obj, val)
return val
def decrementAndGet(self, obj):
val = self.get(obj) - 1
self.set(obj, val)
return val
def addAndGet(self, obj, delta):
val = self.get(obj) + delta
self.set(obj, val)
return val
class AtomicLongFieldUpdater(Stub):
"""java.util.concurrent.atomic.AtomicLongFieldUpdater"""
def __init__(self, tclass, field_name):
super().__init__()
self._tclass = tclass
self._field_name = field_name
@staticmethod
def newUpdater(tclass, field_name):
return AtomicLongFieldUpdater(tclass, field_name)
def get(self, obj):
return getattr(obj, self._field_name, 0)
def set(self, obj, new_value):
setattr(obj, self._field_name, int(new_value))
def lazySet(self, obj, new_value):
self.set(obj, new_value)
def getAndSet(self, obj, new_value):
old = self.get(obj)
self.set(obj, new_value)
return old
def compareAndSet(self, obj, expect, update):
if self.get(obj) == expect:
self.set(obj, update)
return True
return False
def weakCompareAndSet(self, obj, expect, update):
return self.compareAndSet(obj, expect, update)
def getAndIncrement(self, obj):
old = self.get(obj)
self.set(obj, old + 1)
return old
def getAndDecrement(self, obj):
old = self.get(obj)
self.set(obj, old - 1)
return old
def getAndAdd(self, obj, delta):
old = self.get(obj)
self.set(obj, old + delta)
return old
def incrementAndGet(self, obj):
val = self.get(obj) + 1
self.set(obj, val)
return val
def decrementAndGet(self, obj):
val = self.get(obj) - 1
self.set(obj, val)
return val
def addAndGet(self, obj, delta):
val = self.get(obj) + delta
self.set(obj, val)
return val
class AtomicReferenceFieldUpdater(Stub):
"""java.util.concurrent.atomic.AtomicReferenceFieldUpdater"""
def __init__(self, tclass, vclass, field_name):
super().__init__()
self._tclass = tclass
self._vclass = vclass
self._field_name = field_name
@staticmethod
def newUpdater(tclass, vclass, field_name):
return AtomicReferenceFieldUpdater(tclass, vclass, field_name)
def get(self, obj):
return getattr(obj, self._field_name, None)
def set(self, obj, new_value):
setattr(obj, self._field_name, new_value)
def lazySet(self, obj, new_value):
self.set(obj, new_value)
def getAndSet(self, obj, new_value):
old = self.get(obj)
self.set(obj, new_value)
return old
def compareAndSet(self, obj, expect, update):
if self.get(obj) is expect or self.get(obj) == expect:
self.set(obj, update)
return True
return False
def weakCompareAndSet(self, obj, expect, update):
return self.compareAndSet(obj, expect, update)
# ============================================================
# DoubleAccumulator
# ============================================================
class DoubleAccumulator(Stub):
"""java.util.concurrent.atomic.DoubleAccumulator"""
def __init__(self, accumulator_func, identity):
super().__init__()
self._lock = _threading.Lock()
self._value = float(identity)
self._func = accumulator_func
def accumulate(self, x):
with self._lock:
self._value = self._func.applyAsDouble(self._value, float(x))
def get(self):
with self._lock:
return self._value
def reset(self):
with self._lock:
self._value = 0.0
def getThenReset(self):
with self._lock:
old = self._value
self._value = 0.0
return old
def toString(self):
return str(self.get())
def doubleValue(self):
return self.get()
def floatValue(self):
return float(self.get())
def intValue(self):
return int(self.get())
def longValue(self):
return int(self.get())
# ============================================================
# DoubleAdder
# ============================================================
class DoubleAdder(Stub):
"""java.util.concurrent.atomic.DoubleAdder"""
def __init__(self):
super().__init__()
self._lock = _threading.Lock()
self._value = 0.0
def add(self, x):
with self._lock:
self._value += float(x)
def sum(self):
with self._lock:
return self._value
def reset(self):
with self._lock:
self._value = 0.0
def sumThenReset(self):
with self._lock:
old = self._value
self._value = 0.0
return old
def toString(self):
return str(self.sum())
def doubleValue(self):
return self.sum()
def floatValue(self):
return float(self.sum())
def intValue(self):
return int(self.sum())
def longValue(self):
return int(self.sum())
# ============================================================
# LongAccumulator
# ============================================================
class LongAccumulator(Stub):
"""java.util.concurrent.atomic.LongAccumulator"""
def __init__(self, accumulator_func, identity):
super().__init__()
self._lock = _threading.Lock()
self._value = int(identity)
self._func = accumulator_func
def accumulate(self, x):
with self._lock:
self._value = self._func.applyAsLong(self._value, int(x))
def get(self):
with self._lock:
return self._value
def reset(self):
with self._lock:
self._value = 0
def getThenReset(self):
with self._lock:
old = self._value
self._value = 0
return old
def toString(self):
return str(self.get())
def intValue(self):
return int(self.get())
def longValue(self):
return self.get()
def floatValue(self):
return float(self.get())
def doubleValue(self):
return float(self.get())
# ============================================================
# LongAdder
# ============================================================
class LongAdder(Stub):
"""java.util.concurrent.atomic.LongAdder"""
def __init__(self):
super().__init__()
self._lock = _threading.Lock()
self._value = 0
def add(self, x):
with self._lock:
self._value += int(x)
def increment(self):
self.add(1)
def decrement(self):
self.add(-1)
def sum(self):
with self._lock:
return self._value
def reset(self):
with self._lock:
self._value = 0
def sumThenReset(self):
with self._lock:
old = self._value
self._value = 0
return old
def toString(self):
return str(self.sum())
def intValue(self):
return int(self.sum())
def longValue(self):
return self.sum()
def floatValue(self):
return float(self.sum())
def doubleValue(self):
return float(self.sum())
# ============================================================
# Striped64
# ============================================================
class Striped64(Stub):
"""java.util.concurrent.atomic.Striped64"""
def __init__(self):
super().__init__()
self._value = 0
self._lock = _threading.Lock()
def _get_value(self):
with self._lock:
return self._value
def _set_value(self, v):
with self._lock:
self._value = v