使用新特性

ConcurrentHashMap

forEach() 方法

该方法允许你指定对 ConcurrentHashMap 的每个(键,值)对都要执行的函数。

该方法还有如下其他版本。

search() 方法

该方法对 ConcurrentHashMap 的所有元素均应用一个搜索函数。
该搜索函数可以返回一个空值或者一个不同于 null 的值。
search() 方法将返回搜索函数所返回的第一个非空值。

该方法接收两个参数。

该方法的其他版本还有如下几种。

reduce() 方法

该方法和 Stream框架提供的 reduce() 方法相似,但是在这种情况下,你将直接对 ConcurrentHashMap 的元素进行操作。

该方法接收以下三个参数。

还有其他一些版本的 reduce() 方法。

compute() 方法

该方法(在 Map 接口中定义)接收一个元素的键和 BiFunction 接口的一个实现(可以用 lambda 表达式表示)作为参数。
如果元素的键存在于 ConcurrentHashMap 中,则该函数将接收元素的键和值作为参数,否则将接收空值作为参数。

请注意,在 BiFunction 执行期间,将锁闭一个或几个 map 记录。
因此, BiFunction 的执行时间不应过长,而且不应该尝试更新同一 map 中的任何其他记录,否则可能会出现死锁。

merge() 方法

merge() 方法,它可以将一个(键,值)对合并到 map。
如果 ConcurrentHashMap 中不存在该键,则直接插入该键。
如果 ConcurrentHashMap 中存在该键,则需要定义新旧两个键中究竟哪一个应该与新值相关联。

该方法接收三个参数。

ConcurrentLinkedDeque 类

removeIf() 方法

该方法在 Collection 接口中有一个默认实现,它是非并发的而且并没有被 ConcurrentLinkedDeque 类重载。
该方法接收一个 Predicate 接口的实现作为参数,这样就会接收 Collection 中的一个元素作为参数,而且应该返回一个 true 或 false 值。
该方法将处理 Collection 中的所有元素,而且当谓词取值为 true 时将删除这些元素。

spliterator() 方法

该方法返回 Spliterator 接口的一个实现。一个 spliterator 定义了可被 Stream API 使用的数据源。

spliterator 在某种意义上很像迭代器,可用来遍历集合中的所有元素,但你可以对元素进行划分,从而以并发的方式进行遍历操作。

一个 spliterator 具有 8 个定义其行为的不同特征。

该接口最有用的方法是如下几种。