线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。 22. 如何决定使用 HashMap 还是 TreeMap? 对于在 Map 中插入、删除、定位一个元素这...
1、HashMap 是非线程安全的,HashTable 是线程安全的。 2、HashMap 的键和值都允许有 null 值存在,而 HashTable 则不行。 3、因为线程安全的问题,HashMap 效率比 HashTable 的要高。 4、Hashtable 是同步的,而 HashMap 不是。因此,HashMap 更适合于单线程环境,而 Hashtable 适合于多线程环境。一般现在不建...
上图为HashMap的PUT方法的详细过程.其中造成线程不安全的方法主要是resize(扩容)方法.情况一:假设现在有线程A 和线程B 共同对同一个HashMap进行PU操作,假设A和B插入的Key-Value中key的hashcode是相同的,这说明该键值对将会插入到Table的同一个下标的,也就是会发生哈希碰撞,此时HashMap按照平时的做法是形成一个链表...
HashTable 所有的方法都加了锁标记,所以他是线程安全的。 HashTable 和 HashMap的主要的比较 2个的存储结构都差不多,但是hash值的算法都不一样,HashTable默认的初始大小为11,之后每次扩充为原来的2n+1,但是HashMap都是2的幂次方。 也就是说HashTable会尽量使用素数、奇数。而HashMap则总是使用2的幂作为哈希表...
localtime返回一个指向静态变量的指针,这样是线程不安全的,使用localtime_r代替 STL中的容器类 STL容器只保证线程读安全,不保证线程写安全 strtok 应用函数初次调用strtok时传递一个字串的地址,比如”aaa.bbb.dddd”,并将字串的地址保存在自己的静态变量中,当你将来再次调用strtok并传递NULL时(strtok的特殊用法,第二...
(1)线程安全:HashMap是线程不安全的类,多线程下会造成并发冲突,但单线程下运行效率较高;HashTable是线程安全的类,很多方法都是用synchronized修饰,但同时因为加锁导致并发效率低下,单线程环境效率也十分低; (2)插入null:HashMap允许有一个键为null,允许多个值为null;但HashTable不允许键或值为null; ...
线程安全(hashtable线程安全 ) key和value是否允许null(hashMap允许键和值为空值 hashtable是不允许的) 效率上(hashMap的效率会高与hashtable) 1.wait方法和sleep方法得区别? (1)wait属于Object类,sleep属于Thread类 (2)wait会是否锁资源,sleep不会释放锁资源 ...
线程是否安全:HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过synchronized修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!); 效率:因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它; ...
Hashtable 实现并发安全的原理是通过 synchronized 关键字,让我们直接看下源码,以 put() 方法为例,代码如下: 可以看出这个put() 方法是被 synchronized 关键字所修饰的,同理其他的方法例如 clear、get、size 等,也同样是被 synchronized 关键字修饰的。之所以 Hashtable 是线程安全的,是因为几乎每个方法都被 synchro...
说的很清楚,SimpleDateFormat 不是线程安全的,多线程下需要为每个线程创建不同的实例。 不安全的原因是因为使用了 Calendar 这个全局变量: 在日期格式化的时候: 这个time 就会出现多线程并发设置安全问题,比如 A 线程在执行设置的时候,刚好被 B 线程抢先设置了,这样时间不就错乱了。