Udemy Course Multithreading, Concurrency & Performance 33
AtomicInteger使用方式介紹:
進階版:
上述delta也可以是負數!
使用AtomicInteger的Pros & Cons:
Pros:
- 簡單!
- 完全不需要lock或synchronization
- 不會有race condition也不會有data races
Cons:
- 只有該運算本身是Atomic!
- 當同時存在兩個atomic operation,仍會有race condition如下
接著看一個實際的電子系統設計
用傳統的synchronized來鎖定運算為Atomic
首先建立InventoryCounter class來儲放items數量
並建立增減的synchronized Atomic運算如下
接著建立兩個Thread class,以InventoryCounter建立建構子呼叫上述的增減
在Main中就是執行:
執行很快看到結果:
此時完整Code如下:
接著用AtomicInteger改造為不帶synchronized修飾字的
其他Code不變,執行依樣得到:
並且完全沒有任何的Locks!!
此時完整Code如下:
另外很重要的一點:
若只是單Thread的運算,建議還是使用一般類別會比較好!