搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > Wayss在2019年的零碎总结 > Java如何保证集合的线程安全?

Java如何保证集合的线程安全?

Wayss在2019年的零碎总结 2019-02-11
举报

两种方法

  • java.util.Collections提供的同步方法

  • package java.util.concurrent包提供的并发集合

现在对两种方法的使用做个介绍

Collections提供的同步方法

直接看java.util.Collections的源码

public static <T> Collection<T> synchronizedCollection(Collection<T> c);public static <T> List<T> synchronizedList(List<T> list);public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);public static <T> Set<T> synchronizedSet(Set<T> s);

可以看出,对于非线程安全的集合,如ArrayList,使用public static <T> List<T> synchronizedList(List<T> list);方法,便是一个线程安全的了。
但是,有个很大的缺点,就是性能问题,Collections对线程安全的保证,就是简简单单的通过关键字synchronized来满足。
所以,就有了Java并发包

JUC提供了哪些同步集合呢?

数组

java.util.concurrent.CopyOnWriteArrayList

链表

下面这几个算用链表实现的队列
java.util.concurrent.LinkedBlockingDeque
java.util.concurrent.LinkedBlockingQueue
java.util.concurrent.LinkedTransferQueue

栈和队列

java.util.concurrent.ConcurrentLinkedDeque
java.util.concurrent.ConcurrentLinkedQueue
java.util.concurrent.ArrayBlockingQueue

Map

java.util.concurrent.ConcurrentHashMap

Set

java.util.concurrent.CopyOnWriteArraySet

其他常用类

JUC包中还提供了其他的一些重要类,来保证线程同步的,如,

java.util.concurrent.CountDownLatch
java.util.concurrent.atomic.AtomicBoolean
java.util.concurrent.atomic.AtomicInteger
java.util.concurrent.atomic.AtomicLong


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Java如何保证集合的线程安全?》的版权归原作者「Wayss在2019年的零碎总结」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Wayss在2019年的零碎总结微信公众号

Wayss在2019年的零碎总结微信公众号:gh_a36e4e0501e0

Wayss在2019年的零碎总结

手机扫描上方二维码即可关注Wayss在2019年的零碎总结微信公众号

Wayss在2019年的零碎总结最新文章

精品公众号随机推荐

举报