Non-blocking algorithms 是一種算法可以允許Threads存取並享狀態的物件而且不會造成阻塞。在一般說法,Non-blocking algorithms中如果一個Thread被暫停時,不會導致其他Thread也暫停。
接下來會講解一下Non-blocking algorithms和Blocking algorithms的分別。
Non-blocking algorithms的運作原理如下圖所示:
Non-blocking algorithms運作一般包含兩個步驟:
第一, 執行Thread的請求操作
第二, 通知請求操作不能被執行
例子:
AtomicBoolean, AtomicInteger, AtomicLong 和AtomicReference
(它們都是class)
Blocking algorithms的運作原理如下圖所示:
Blocking algorithms運作一般包含兩個步驟:
第一, 執行Thread的請求操作
第二, 會阻塞Thread直到被安全執行操作
例子:
java.util.concurrent.BlockingQueue 界面
總結,從以上例子可以留意到它們的分別在於第2個步驟的處理方式不同。Non-blocking algorithms在遇到有其他thread正在存取相同的物件時會即時通知請求操作不能被執行,而Blocking algorithms不會有通知反而是一直在等待被執行。