建立原子型別

對於簡單的多執行緒程式碼,使用同步是可以接受的。但是,使用同步確實會產生實時性影響,並且隨著程式碼庫變得越來越複雜,最終會出現死鎖飢餓或動態鎖定的可能性。

在更復雜的併發性的情況下,使用原子變數通常是更好的選擇,因為它允許以執行緒安全的方式訪問單個變數,而無需使用同步方法或程式碼塊的開銷。

建立 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