((算法面试:二)Hashtable和ConcurrentHashMap
Hashtable和ConcurrentHashMap如何实现线程安全
第一题:
在未作同步控制时,就算是最简单的线程也不能保证是安全的;例:用两个线程做累加计时器时不但不安全,就连每次结果都是不一定的。
第二题
1:HashMap在多线程下肯定是线程不安全的;
2:HashMap的get,put方法源码,未加任何与同步有关的关键字;
第三题
1:HashTable将所有和数据打交道的方法都加了内置锁;但在多线程环境下都有synchronize关键字,这样效率很低下;
2:HashTable在get,put,contains等方法加了synchronize关键字(内置锁);
第四题:
但在多线程环境下都有synchronize关键字,这样效率很低下,故需要这个ConcurrentHashMap
第五题
1:HashTable是吧数组链表上所有的元素看成一个大桶,当有一个数据进入做数据处理时其它线程都要等待;
2:ConcurrentHashMap;1:在jdk1.7前,如果是1000个桶分成16个端也就是16把锁;2:在jdk1.8后,如果是1000个桶那分1000把锁,每个桶都有自己独立的锁并不互相干扰,这样锁的力度更小,多线程同时并发的数量更多。