阻塞型数据结构和非阻塞型数据结构
Java 并发 API 中提供了两种并发数据结构。
-
阻塞型数据结构:
这种类型的数据结构提供了插入数据和删除数据的方法,当操作无法立即执行时(例如,如果你要选取某个元素但数据结构为空),执行调用的线程就会被阻塞,直到可以执行该操作为止。 -
非阻塞型数据结构:
这种类型的数据结构提供了插入数据和删除数据的方法,当无法立即执行操作时,返回一个特定值或者抛出一个异常。
有时,非阻塞型数据结构会有一个与之等效的阻塞型数据结构。
例如, ConcurrentLinkedDeque 类是一个非阻塞型数据结构,而 LinkedBlockingDeque 类则是一个与之等效的阻塞型数据结构。
阻塞型数据结构的一些方法具有非阻塞型数据结构的行为。
例如, Deque 接口定义了 pollFirst() 方法,如果双端队列为空,该方法并不会阻塞,而是返回 null 值。
另一方面, getFirst() 方法在这种情况下会抛出异常。每个阻塞型队列的实现都实现了该方法。