简介
本文用示例介绍Java中的Set的线程安全的操作方法。
线程安全的操作方法
方法 | 示例 | 原理 | 优缺点 |
Collections .synchronizedSet(List) | Set set = Collections.synchronizedSet(new HashSet<>()); | Object mutex = new Object()。对此对象使用synchronized | |
JUC中的CopyOnWriteSet | CopyOnWriteSet<String> set= new CopyOnWriteSet<String>(); | 基于CopyOnWriteArrayList | 读多写少时性能高; 写多时性能差; |
ConcurrentHashMap .newKeySet() | Set<String> set = ConcurrentHashMap.newKeySet() | 基于ConcurrentHashMap | 占空间略大。 写多读少时性能高于CopyOnWriteSet。 读多写少时性能差于CopyOnWriteSet。 |
Collections.newSetFromMap( new ConcurrentHashMap<>()) | Set<String> set = Collections.newSetFromMap(new ConcurrentHashMap<>()); | 基于ConcurrentHashMap | 占空间略大。 写多读少时性能高于CopyOnWriteSet。 读多写少时性能差于 CopyOnWriteSet。 |