admin 管理员组文章数量: 1184232
2024年1月13日发(作者:jsp论坛源码)
线程安全的集合有哪些
Java里线程安全的集合的目的是实现集合多线程同步访问。在不影响程序性能和使用空间的前提下,保证多线程安全。
Java中提供了多种线程安全的集合,最常见的线程安全集合有Vector、HashTable、Stack 等。
一. Vector:
Vector是一种同步性较强的集合类,它的所有方法都是同步的,它是Java在早期就提供了线程安全能力的类,它与ArrayList相比最大的特点就是它线程安全,但是由于采用synchronized同步,所以性能下降了,不适合在大量的多线程情况下使用。
Vector会对每个操作进行外部的加锁,它允许让一个或多个线程来访问它,达到线程安全的目的。
二. HashTable:
Hashtable是线程安全的,它来自JDK1.0,主要用于存储键值对。它是基于哈希表的Map实现。它与HashMap的相同点是所有的非static的方法都是同步的,但它的同步机制与HashMap不一样,Hashtable是对它的所有方法进行同步,但是可能会严重的影响性能。
HashTable是实现线程安全的一种较老的方法,它使用synchronized关键字对方法加锁,一次只允许一个线程访问它,这样就达到了线程安全的目的,但是由于同步机制增加了复杂性,所以性能有所降低。
三. Stack:
Stack是一种线程安全的集合,它之前只有一个方法synchronized,它允许多线程同时访问该adjprStack但保证了其线程安全,不允许多个线程同时访问,从而解决了多线程安全问题。
四、ConcurrentMap 和 ConcurrentHashMap:
ConcurrentMap 是rent包中使用的接口,它是一种特殊的Map,它提供更强的安全机制,可以在多线程并发访问的情况下安全的访问并修改它的key-value的记录。
ConcurrentHashMap是ConcurrentMap的实现,它是一个支持任务安全的多线程共享HashMap,它是并发容器的一个很好的实现,可以很好的解决多线程安全的问题。它的每个操作都是原子性的,它采用一种叫ReentrantLock的粒度加锁来实现安全性,它只会对需要被操作的部分加锁,而不是对整个Map加锁,从而提高性能。
以上就是Java里线程安全的集合的介绍,以上集合都是以不同的方式来实现线程安全的,但目的是一样的
版权声明:本文标题:线程安全的集合有哪些 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1705092815a472894.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论