collections.synchronizedmap
编程之家今天给各位分享collections.synchronizedmap的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
【集合】List、Map、Set部分实现类是否线程安全
class HashSetE 不是线程安全的。 HashSetd底层由HashMap实现,HashSet的add方法调用对的是HashMap的put方法,传输的key是将传入set的元素,传入的value是一个固定的Object对象。
HashMap,HashSet,ArrayList都不具备线程安全。
MSDN说了,List类就是线程安全的。但是,他只负责List的线程安全,不能负责List元素访问的线程安全。也就是说,他保证,对list进行元素的增加,删除什么的,是线程安全的。
HashMap和Hashtable区别?
1、hashmap和hashtable的区别:hash数组默认大小不同 HashMap:HashMap中 hash数组的默认大小是16,而且一定是2的指数。Hashtable:HashTable中hash数组默认大小是11,增加的方式是 old*2+1。
2、HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
3、Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 2引进的Map接口的一个实现。
如何实现线程安全的HashMap
这是因为HashMap的实现不是线程安全的,它的内部结构是由数组和链表组成的,多个线程同时对它进行操作,会导致链表形成环形或链表断裂,导致数据读取或修改错误。
JAVA中线程安全的map有:Hashtable、synchronizedMap、ConcurrentHashMap。java中map中线程安全怎么实现:同步的map就是Hashtable, concurrenthashmap。
一个线程在读时其他线程必须等待,吞吐量较低,性能较为低下。而J.U.C给我们提供了高性能的线程安全HashMap:ConcurrentHashMap。
分别如下: 方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的。 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现。
ConcurrentMap能够保证每一次调用(例如一次putIfAbsent)都是原子操作,不受多线程影响,但并不保证多次调用之间也是原子操作。
线程安全的map在jdk1.5及其更高版本环境有哪几种方法可
线程安全的map在jdk1。5及其更高版本环境有2种方法可以实现。Mapmap等于newConcurrentHashMap。Mapmap等于CollectionssynchronizedMapnewHashMap。线程安全是多线程编程时的计算机程序代码中的一个概念。
使用 synchronized 关键字,代码如下 synchronized(anObject) { value = map.get(key);} 使用 JDK5提供的锁(Java.util.concurrent.locks.Lock)。
另外一种方法就是通过SortedMap,但必须要实现Comparable接口。
可以被任意的对象调用的方法肯定定义在Object类中。注意:等待唤醒机制,通常都用在同步中,因为需要锁的支持。而且必须要明确wait notify 所作用的锁对象。
之前大概分为三种,Set,List,Map三种,JDK5之后,增加Queue.主要由Collection和Map两个接口衍生出来,同时Collection接口继承Iterable接口,所以我们也可以说java里面的集合类主要是由Iterable和Map两个接口以及他们的子接口或者其实现类组成。
StringBuffer(JDK0)StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。