首页 > 试题广场 >

你知道哪些线程安全的集合?

[问答题]
你知道哪些线程安全的集合?
java.uti包中的集合类大部分都是非线程安全的,例如:ArrayList/LinkedList/HashMap等等,但也有少部分是线程安全的,像是Vector和Hashtable,它们属于很古老的API了,是基于Synchronized实现的,性能很差,在实际的开发中不常用。一般可以使用collections工具类中的syncheronizedXxx()方法将非线程安全的集合包装成线程安全的类。在java5之后可以使用concurrent包提供的大量的支持并发访问的集合类,例如ConcurrentHashMap/CopyOnWriteArrayList等
发表于 2022-04-24 16:22:14 回复(0)
hashTable/vector/concurrentHasmap是线程安全的。 另外Collections工具类提供了相应的方法,可以将不安全的集合类包装成安全的集合类。
发表于 2022-05-07 13:00:29 回复(0)
java.util包: * java.util包下的集合类中,大部分都是非线程安全的,但也有少数的线程安全的集合类,例如Vector、Hashtable,它们都是非常古老的API。虽然它们是线程安全的,但是性能很差,已经不推荐使用了。 * 对于java.util包下非线程安全的集合,可以利用Collections工具类提供的synchronizedXxx()方法,将这些集合类包装成线程安全的集合类。 从JDK 1.5开始,并发包下新增了大量高效的并发的容器,这些容器按照实现机制可以分为三类: * 第一类是以降低锁粒度来提高并发性能的容器,它们的类名以Concurrent开头,如: * ConcurrentHashMap : 线程安全的 HashMap。(在 ConcurrentHashMap 中,无论是读操作还是写操作都能保证很高的性能:在进行读操作时(几乎)不需要加锁,而在写操作时通过锁分段技术只对所操作的段加锁而不影响客户端对其它段的访问。) * ConcurrentSkipListMap : 跳表的实现。这是一个 Map,使用跳表的数据结构进行快速查找。 * ConcurrentLinkedQueue : 高效的并发队列,可以看做一个线程安全的 LinkedList,这是一个非阻塞队列,主要使用 CAS 非阻塞算法来实现线程安全。 * 第二类是采用写时复制技术实现的并发容器,它们的类名以CopyOnWrite开头,如: * CopyOnWriteArrayList : 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector。(CopyOnWriteArrayList 读取是完全不用加锁的,并且更厉害的是:写入也不会阻塞读取操作。只有写入和写入之间需要进行同步等待。CopyOnWriteArrayList 类的所有可变操作(add,set 等等)都是通过创建底层数组的新副本来实现的。当 List 需要被修改的时候,我并不修改原有内容,而是对原有数据进行一次复制,将修改的内容写入副本。写完之后,再将修改完的副本替换原来的数据,这样就可以保证写操作不会影响读操作了。) * 第三类是采用Lock实现的阻塞队列,内部创建两个Condition分别用于生产者和消费者的等待,这些类都实现了BlockingQueue接口,如: * ArrayBlockingQueue:BlockingQueue 接口的有界队列实现类,底层采用数组来实现。 * LinkedBlockingQueue:可以当做无界队列也可以当做有界队列来使用,底层基于单向链表实现的阻塞队列。 * PriorityBlockingQueue:是一个支持优先级的无界阻塞队列, PriorityQueue 的线程安全版本。 加分回答 Collections还提供了如下三类方法来返回一个不可变的集合,这三类方法的参数是原有的集合对象,返回值是该集合的“只读”版本。通过Collections提供的三类方法,可以生成“只读”的Collection或Map。 emptyXxx():返回一个空的不可变的集合对象 singletonXxx():返回一个只包含指定对象的不可变的集合对象 unmodifiableXxx():返回指定集合对象的不可变视图
编辑于 2022-06-28 11:42:28 回复(0)
java.util包下的集合大部分都是非线程安全的,如实现List接口的ArrayList,LinkedList,实现set接口的HashSet类,实现SortSet接口的TreeSet类,。但是也有极少数的线程安全的集合,如Vector,HashTable等,但是它们是基于Synchronized关键字实现的,性能很差,在开发中不常用。一般可以使用collections工具类中方法将非线程安全的集合类包装成线程安全的类。同时java5之后,concurrent包中提供了大量的支持并发访问的集合类。例如ConcurrentHashMap和CopyOnWriteArrayList等。
发表于 2022-05-19 21:41:13 回复(0)
线程安全的集合有HashTable,Vector等,但是这些集合性能较差,一般的方法是采用collections工具类的synchronized方法将非线程安全的集合包装成线程安全的
发表于 2022-05-14 14:34:15 回复(1)
大多数集合都是非线程安全的,有少数的线程安全的集合类例如Vector、Hashtable,不推荐使用。对于非线程安全的集合类,可以用Collections工具类提供的synchronizedXxx()方法包装成线程安全类。JDk1.5开始,新增了大量高效的并发容器,Concurrent开头的,CopyOnWriter开头的,以及采用Lock实现的阻塞队列。
发表于 2022-12-24 22:57:04 回复(0)
java.uti包中的集合类大部分都是非线程安全的,例如:ArrayList/LinkedList/HashMap等等,但也有少部分是线程安全的,像是Vector和Hashtable,它们属于很古老的API了,是基于Synchronized实现的,性能很差,在实际的开发中不常用。一般可以使用collections工具类中的syncheronizedXxx()方法将非线程安全的集合包装成线程安全的类。在java5之后可以使用concurrent包提供的大量的支持并发访问的集合类,例如ConcurrentHashMap/CopyOnWriteArrayList等
发表于 2022-05-26 17:21:33 回复(0)
HashTable ConcurrentHashmap Vector CopyandWriteArraylist
编辑于 2024-04-02 17:12:38 回复(0)
一般可以使用collections工具类中的Collections.synchronized()方法将非线程安全的集合包装成线程安全的类,Vector,HashTable,ConcurrentHashMap,CopyOnWrite(拷贝出来一份进行修改)
发表于 2024-04-01 19:45:16 回复(0)
答: HashTable、vector、concurrentHashMap是线程安全的,另外可以将不安全的集合类通过加同步锁的方式包装成安全的集合类。
发表于 2024-03-28 09:58:16 回复(0)
Vector HashTable ConcurrentHashMap 在Java1.5后,Collctions工具类可以使用synchronizedXxx方法将非线程安全的转换成线程安全的
编辑于 2024-02-29 10:27:20 回复(0)
Vector: 线程安全的 List 集合,底层使用数组实现。 Hashtable: 线程安全的 Map 集合,底层使用哈希表实现。 Stack: 线程安全的 LIFO 栈集合,底层使用 Vector 实现。 ConcurrentHashMap: 高并发情况下高效且线程安全的 Map 集合,底层使用分段锁和 CAS 操作实现。 CopyOnWriteArrayList: 线程安全的 List 集合,每次修改操作都会创建一个新的副本,避免对原集合的直接修改。 CopyOnWriteMap: 线程安全的 Map 集合,每次修改操作都会创建一个新的副本,避免对原集合的直接修改。 BlockingQueue: 支持阻塞操作的线程安全队列,可以用于生产者-消费者模式等场景
编辑于 2024-02-26 14:19:26 回复(0)
1、HashTable、Vector都是线程安全的,但是都很古老,性能比较差。 2、利用Collections工具类提供的synchronized()方法,可以将这些集合类包装成线程安全的集合类。 3、jdk1.5之后,添加了很多并发的容器。 1、降低锁粒度的,以Concurrent开头的类,ConcurrentHashMap 2、写时复制技术扽,以CopyOnWrite开头的,CopyOnWriteArrayList() 3、使用Lock阻塞队列
发表于 2023-11-02 21:19:49 回复(0)
集合分为单列集合和双列集合,单列集合包括有序集合Vetor线程安全,ArrayList非线程安全,LinkedList非线程安全,无序集合HashSet TreeSet 双列集合包括HashTable 线程安全,HashMap非线程安全,ConcurrentHashMao线程安全,TreeMap
发表于 2023-09-11 10:47:05 回复(0)
HashTable、Vector、ConcurrentHashMap、CopyOnWriteArrayList等
发表于 2023-08-23 17:25:48 回复(0)
hashtable currenthashmap vector 另外collections工具类提供了相应的方法 将不安全集合类包装成安全的集合类
发表于 2023-08-16 17:11:01 回复(0)
线程安全的集合有HashTable,Vector等,但是这些集合性能较差,一般使用线程安全是用collections工具类的synchronized方法将非线程安全的集合包装成线程安全的
发表于 2023-08-14 18:54:12 回复(0)
java.util包下大部分集合都不是线程安全的如arraylist,linklist,treeset,hashmap等,线程安全的集合有vector,hashtable,但是它们的性能不佳,因此一般情况下是使用常用的list集合加synchronized锁将其包装成线程的类。
发表于 2023-08-13 19:38:28 回复(0)
1.第一代线程安全集合类 Vector、Hashtable 是怎么保证线程安排的:使用synchronized修饰方法 缺点:效率低下 2.第二代线程非安全集合类 ArrayList、HashMap 线程不安全,但是性能好,用来替代Vector、Hashtable 使用ArrayList、HashMap,需要线程安全怎么办呢? Collections.synchronizedList(list);Collections.synchronizedMap(m); 底层使用synchronized代码块锁虽然也是锁住了所有的代码,但是锁在方法里边,并所在方法外边性能可以理解 为稍有提高吧。毕竟进方法本身就要分配资源的 3.第三代线程安全集合类 在大量并发情况下如何提高集合的效率和安全呢? java.util.concurrent.* ConcurrentHashMap: CopyOnWriteArrayList CopyOnWriteArraySet:注意不是CopyOnWriteHashSet* 底层大都采用Lock锁(1.8的ConcurrentHashMap不使用Lock锁),保证安全的同时,性能也很高。
发表于 2023-07-12 14:30:50 回复(0)
JAVA的集合类中大多都是线程不安全的集合。其中vector、hashtable是线程安全的,但是其效率太低,是对底层的整个数据结构(数组、数组+链表)加了锁,因此不建议使用。可以通过collections工具类中的synchronizedXxx方法将非线程安全的集合包装成线程安全的类,在jdk5之后JAVA还提供了ConcurrentHashMap和CopyOnWriteArray来实现线程安全的集合类。
编辑于 2023-07-12 08:54:55 回复(0)