iT邦幫忙

0

閱讀時間: 5分鐘

Non-blocking algorithms 是一種算法可以允許Threads存取並享狀態的物件而且不會造成阻塞。在一般說法,Non-blocking algorithms中如果一個Thread被暫停時,不會導致其他Thread也暫停。

接下來會講解一下Non-blocking algorithms和Blocking algorithms的分別。

Non-blocking algorithms的運作原理如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20200128/20119569ZCzY5i0Vjv.jpg
Non-blocking algorithms運作一般包含兩個步驟:
第一, 執行Thread的請求操作
第二, 通知請求操作不能被執行

例子:
AtomicBoolean, AtomicInteger, AtomicLong 和AtomicReference
(它們都是class)

Blocking algorithms的運作原理如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20200128/20119569etZ53DHbii.jpg
Blocking algorithms運作一般包含兩個步驟:
第一, 執行Thread的請求操作
第二, 會阻塞Thread直到被安全執行操作

例子:
java.util.concurrent.BlockingQueue 界面

總結,從以上例子可以留意到它們的分別在於第2個步驟的處理方式不同。Non-blocking algorithms在遇到有其他thread正在存取相同的物件時會即時通知請求操作不能被執行,而Blocking algorithms不會有通知反而是一直在等待被執行。


尚未有邦友留言

立即登入留言