Hashtable和ConcurrentHashMap如何实现线程安全
目录 未做同步控制时,代码在多线程下是安全的吗? HashMap的是线程安全的吗? 那么线程安全的Map-HashTable是如何实现线程安全的呢? 有了HashTable为何还要有个ConcurrentHashMap? ConcurrentHashMap是如何实现线程安全的呢? 未做同步控制时,代码在多线程下是安全的吗? 代码执行都是靠线程调度执行的,默认情况下就是多线程的,所以不做同步控制理论上代码在多线程情况下存在线程安全问题。 我们可以通过对方法和变量操作加锁、使用线程安全的方法和操作方式解决。 HashMap的是线程安全的吗? 非线程安全,本身没有任何线程安全的控制。比如put,remove这些操作都是普通方法。 那么线程安全的Map-HashTable是如何实现线程安全的呢? HashTable在和数据本身操作的方法上都加了一个synchronized关键字,这种方式在多线程环境下效率不高,因为对数据操作只允许一个线程进行处理。 有了HashTable为何还要有个ConcurrentHashMap? ConcurrentHashMap是为了解决在多线程环境下提升数据操作效率而设计的一个数据结构,解决了HashTable效率上的问题,提供了并发访问的可能。 ConcurrentHashMap是如何实现线程安全的呢? Hash算法有个桶的概念