ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 引子 我们知道Java程序中有一些比较隐蔽的问题,程序运行时是不会报错的,但是结果就是不对。 比如精度丢失问题,需要注意类型的范围。 ![](https://img.kancloud.cn/24/92/2492c84ecea82213d038686869fc8e04_570x278.png) 还有一些是在多线程环境下会出现的问题,我们来看多线程并发下的ArrayList和HashMap容器的表现。 ArrayList: ![](https://img.kancloud.cn/03/51/035174b7ec43ac2ad710b236efab1c25_1520x1164.png) HashMap: ![](https://img.kancloud.cn/cc/94/cc94104f7377f387b514003f851b5911_1414x1270.png) 既然普通的容器在多线程并发环境下会出现问题,那么还有哪些并发容器可供我们使用呢? ## 并发容器包装工具类 可以使用线程安全工具类包装后得到线程安全的容器,如: ~~~ Map<String, String> map = Collections.synchronizedMap(new HashMap<>()); ~~~ 工具类支持的包装方法如下图: ![](https://img.kancloud.cn/6a/49/6a49a6764d0d122969b435a12ea1325b_1200x426.png) 该方式是通过`SynchronizedMap`使用`synchronized`实现线程安全的,并发级别高的场景下,请使用其他的解决方案。 ## 专用并发容器 * ConcurrentHashMap * CopyOnWriteArrayList * ConcurrentLinkedQueue * BlockingQueue * ConcurrentSkipListMap