🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
像 ArrayList 和 HashMap 这类集合是非线程安全的,但是可以调用同步包装器使其转换为线程安全,如下: ``` List<E> synchArrayList = Collections.synchronizedList(new ArrayList<E>()); Map<K, V> synchHashMap = Collections.synchronizedMap(new HashMap<K, V>()); ``` 这样就会使这些集合的方法得以使用锁来保护,提供了线程安全访问。但是如果将有一个线程要对集合进行修改,而另一个线程要进行迭代,仍然需要客户端锁定。如下: ``` synchronized(synchHashMap) { Iterator<K> iter = synchHashMap.keySet().iterator(); while (iter.hasNext())...; } ``` 所以不推荐使用同步包装器,最好使用`java.util.concurrent`包中的集合,但是如果使用CopyOnWriteArrayList时,可以使用同步包装器来替换,性能更优。