建立原子型別
對於簡單的多執行緒程式碼,使用同步是可以接受的。但是,使用同步確實會產生實時性影響,並且隨著程式碼庫變得越來越複雜,最終會出現死鎖 ,飢餓或動態鎖定的可能性。
在更復雜的併發性的情況下,使用原子變數通常是更好的選擇,因為它允許以執行緒安全的方式訪問單個變數,而無需使用同步方法或程式碼塊的開銷。
建立 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
其他原子型別也是如此。
有一個明顯的例外,沒有 float
和 double
型別。這些可以通過 Float.floatToIntBits(float)
和 Float.intBitsToFloat(int)
用於 float
以及 Double.doubleToLongBits(double)
和 Double.longBitsToDouble(long)
用於雙打來模擬。
如果你願意使用 sun.misc.Unsafe
,你可以使用 sun.misc.Unsafe
中的原子操作將任何原始變數用作原子。所有基本型別都應該以 int 或 long 轉換或編碼,以便以這種方式使用它。有關詳細資訊,請參閱: sun.misc.Unsafe 。