admin 管理员组

文章数量: 1086019


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里线程安全的集合的介绍,以上集合都是以不同的方式来实现线程安全的,但目的是一样的


本文标签: 线程 访问 性能 集合 加锁