创建原子类型

对于简单的多线程代码,使用同步是可以接受的。但是,使用同步确实会产生实时性影响,并且随着代码库变得越来越复杂,最终会出现死锁饥饿或动态锁定的可能性。

在更复杂的并发性的情况下,使用原子变量通常是更好的选择,因为它允许以线程安全的方式访问单个变量,而无需使用同步方法或代码块的开销。

创建 AtomicInteger 类型:

AtomicInteger aInt = new AtomicInteger() // Create with default value 0

AtomicInteger aInt = new AtomicInteger(1) // Create with initial value 1

与其他实例类型类似。

AtomicIntegerArray aIntArray = new AtomicIntegerArray(10) // Create array of specific length
AtomicIntegerArray aIntArray = new AtomicIntegerArray(new int[] {1, 2, 3}) // Initialize array with another array

其他原子类型也是如此。

有一个明显的例外,没有 floatdouble 类型。这些可以通过 Float.floatToIntBits(float)Float.intBitsToFloat(int) 用于 float 以及 Double.doubleToLongBits(double)Double.longBitsToDouble(long) 用于双打来模拟。

如果你愿意使用 sun.misc.Unsafe,你可以使用 sun.misc.Unsafe 中的原子操作将任何原始变量用作原子。所有基本类型都应该以 int 或 long 转换或编码,以便以这种方式使用它。有关详细信息,请参阅: sun.misc.Unsafe