阅读时间: 5分钟
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不会有通知反而是一直在等待被执行。