Udemy Course Multithreading, Concurrency & Performance 33

Atomic Integers & 無Lock電子交易庫存系統範例

ZONGRU Li
Sep 30, 2021

AtomicInteger使用方式介紹:

進階版:

上述delta也可以是負數!

使用AtomicInteger的Pros & Cons:

Pros:

  1. 簡單!
  2. 完全不需要lock或synchronization
  3. 不會有race condition也不會有data races

Cons:

  1. 只有該運算本身是Atomic!
  2. 當同時存在兩個atomic operation,仍會有race condition如下
獨立的兩個operation,即便各自都是atomic

接著看一個實際的電子系統設計

用傳統的synchronized來鎖定運算為Atomic

首先建立InventoryCounter class來儲放items數量

並建立增減的synchronized Atomic運算如下

接著建立兩個Thread class,以InventoryCounter建立建構子呼叫上述的增減

在Main中就是執行:

執行很快看到結果:

此時完整Code如下:

接著用AtomicInteger改造為不帶synchronized修飾字的

其他Code不變,執行依樣得到:

並且完全沒有任何的Locks!!

此時完整Code如下:

另外很重要的一點:

若只是單Thread的運算,建議還是使用一般類別會比較好!

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet