`

【原创】关于Hashmap,Hashtable,ConcurrentHashMap并发测试

 
阅读更多

最近公司一个商城系统性能测试,发现数据库商品扣库存这块造成大量阻塞延时,所以想到通过map来改造。

 

由此引出对Hashmap,Hashtable,ConcurrentHashMap这几个map的一个小测试,看是否线程安全。

 

 

	// final Map<String,Integer> map = new
		// ConcurrentHashMap<String,Integer>();
		final Map<String, Integer> map = new HashMap<String, Integer>();
		// final Map<String,Integer> map = new Hashtable<String,Integer>();

		map.put("a", new Integer(0));
		// map.put("b", new Integer("5000"));

		final Object lock = new Object();

		for (int i = 0; i < 1000; i++) {
			Thread th = new Thread(new Runnable() {

				@Override
				public void run() {

					//synchronized (lock) {
						System.out.println("Thread:"
								+ Thread.currentThread().getName());
						map.put("a", new Integer(map.get("a").intValue() + 1));
					//}

				}
			});
			th.setName(String.valueOf(i));
			th.start();
		}

		Thread.sleep(5000);
		System.out.println(map.get("a"));

 

结果:不加synchronized的情况下,三种map计算出来的值都不是1000。

 

对于商品扣库存的场景,我们可以用商品id作为lock,避免使用全局锁,降低锁粒度,优化性能。

 

 

 

 

分享到:
评论

相关推荐

    HashMap,HashTable,ConcurrentHashMap之关联.docx

    HashMap,HashTable,ConcurrentHashMap 之关联 HashMap、HashTable、ConcurrentHashMap 是 Java 集合类中的重点,以下是对它们的详细解释: HashMap HashMap 是非线程安全的,它的键和值都允许有 null 值存在。...

    hashMap和hashTable的区别

    ### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...

    HashMap与HashTable区别

    - **HashMap**: 相对于`HashTable`,`HashMap`在单线程或低并发情况下具有更好的性能。这是因为`HashMap`没有同步开销,因此操作速度更快。 #### 四、内部实现细节 - **HashTable**: 内部使用了`Entry`类来表示...

    hashtable和hashmap的区别

    此外,从Java 5开始,推荐使用`ConcurrentHashMap`,它通过细粒度锁来提高并发性能,比传统的`Hashtable`更高效。 #### 3. 支持null值 - **Hashtable**: 不支持键或值为null。如果尝试将null作为键或值放入`...

    hashmap和hashtable的区别.docx

    - HashMap 未实现同步,这意味着在并发环境中使用需要手动使用 `Collections.synchronizedMap()` 来同步,或者使用 Java 5 引入的 ConcurrentHashMap,它提供了更好的并发性能和扩展性。 - Hashtable 的同步是内置...

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    为了防止“fail-fast”迭代器引发的ConcurrentModificationException,建议在多线程场景下使用ConcurrentHashMap,它提供了高级的并发控制策略,以保证在并发环境下的性能和安全性。 总的来说,HashMap、HashTable...

    Java并发编程笔记之ConcurrentHashMap原理探究.docx

    Java并发编程中的ConcurrentHashMap是HashMap的一个线程安全版本,设计目标是在高并发场景下提供高效的数据访问。相比HashTable,ConcurrentHashMap通过采用锁分离技术和更细粒度的锁定策略来提升性能。HashTable...

    HashMap 和 Hashtable的区别

    在 Java 5 及以后版本中,推荐使用 `ConcurrentHashMap` 替代 `Hashtable`,因为它提供了更好的并发性能。 4. **迭代器行为** - `HashMap` 的迭代器是 fail-fast 的,即在迭代过程中,如果其他线程修改了 `HashMap...

    HashMap和HashTable区别共2页.pdf.zi

    - `HashMap`在迭代时的性能通常优于`HashTable`,因为`HashTable`的同步机制降低了并发性能。`HashMap`通过使用迭代器(Iterator)的方式,可以在遍历时避免同步带来的开销。 4. **方法命名**: - `HashTable`...

    Java-并发容器之ConcurrentHashMap

    传统的线程安全解决方案,如Hashtable或使用Collections.synchronizedMap包装HashMap,虽然实现了线程安全,但性能上并不理想,因为它们采用了独占锁,只允许单个线程执行操作。 在JDK 1.6版本中,...

    java面试题——详解HashMap和Hashtable 的区别

    比如使用 `Collections.synchronizedMap()` 工具方法,因此 `Hashtable` 在现代 Java 开发中逐渐被弃用,推荐使用 `ConcurrentHashMap` 来代替,它提供了更高效的并发控制。 综上所述,`HashMap` 通常更适合于单...

    关于如何解决HashMap线程安全问题的介绍

    3. 使用HashTable:虽然HashTable是线程安全的,但由于其所有操作都是同步的,所以在多线程并发访问时,性能较低。因此,在现代Java开发中,通常更倾向于使用ConcurrentHashMap。 4. 避免在多线程环境中直接使用...

    HashMap和Hashtable的区别

    在Java编程语言中,`HashMap`和`Hashtable`都是实现`Map`接口的容器,用于存储键值对数据。它们的主要区别在于线程安全性、继承结构、提供的接口、对`null`值的支持、容量初始化与扩容策略以及哈希计算与冲突解决...

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    现代开发中更倾向于使用`ConcurrentHashMap`等更高效的并发数据结构。 在实际应用中,应根据具体需求选择合适的`Map`实现类。例如,在需要快速查找并且不关心元素顺序时,可以选择`HashMap`;如果需要排序,则可以...

    hashmap面试题_hashmap_

    答:在多线程环境下,可以使用ConcurrentHashMap,它是线程安全的HashMap实现。 五、HashMap与HashSet的关系 HashSet基于HashMap实现,每个元素作为HashMap的一个键,值为null。因此,HashSet的操作性能也依赖于...

    浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别

    - `HashMap` 不是线程安全的,如果需要在多线程环境中使用,需要手动进行同步控制,如使用synchronized关键字或者并发包下的ConcurrentHashMap。 3. **值的约束**: - `Hashtable` 不允许null作为键(key)或值...

    第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1

    由于同步机制的存在,Hashtable的性能相比HashMap较低,现在在多线程需求下,通常更推荐使用ConcurrentHashMap,它在并发性能上做了优化。此外,Hashtable不支持null键和null值。 TreeMap是一种基于红黑树的Map实现...

    Java容器HashMap与HashTable详解

    然而,在Java 1.5之后,ConcurrentHashMap成为多线程环境下推荐使用的线程安全的HashMap替代品,它提供了更好的并发性能。 在实际开发中,理解HashMap和HashTable的底层工作原理以及它们的优缺点至关重要。选择合适...

    并发编程atomic&collections-课上笔记1

    本文主要讲述了 Java 中的并发编程,包括 atomic 包的介绍、CAS 算法的原理、ABA 问题的解决方案,以及 collections 中的 HashMap、HashTable 和 ConcurrentHashMap 的源码分析。 Atomic 包的介绍 ----------------...

    leetcode下载-study:学习笔记

    leetcode下载 目录 操作系统 虚拟内存与物理内存转化 CPU 调度方式 进程栈大小 进程与线程区别 线程状态 网络 ...HashTable ConcurrentHashMap JAVA IO Go Redis Redis Cluster Redis 持久化方式 Redis

Global site tag (gtag.js) - Google Analytics