`

【原创】关于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,避免使用全局锁,降低锁粒度,优化性能。

 

 

 

 

分享到:
评论

相关推荐

    leetcode下载-study:学习笔记

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

    Java面试题-并发.docx

    接着,文档讨论了负载因子的概念及其取值为0.75的原因,以及HashMap在多线程环境下的线程安全性问题,指出了可能导致CPU利用率达到100%的并发扩容问题,并提出了解决方案。 此外,文档介绍了哈希冲突的概念和解决...

    Java后端面试问题整理.docx

    • 熟悉常用集合数据结构(数组、Hashmap、ConcurrentHashMap、HashTable、ArrayList、Vetor、LinkedList、HashSet、TreeSet、LinkedHashSet),了解AVL、RBtree、B/B+树、跳表 • 熟悉常见异常分类以及处理,熟悉反射...

    【面试系列】并发容器之ConcurrentHashMap

    微信公众号:放开我我还能学 ...这就导致了所有并发操作都要竞争同一把锁,一个线程在进行同步操作时,其他线程只能等待,大大降低了并发操作的效率。 Collections#SynchronizedMap 同步包装器 SynchronizedMap

    java8源码-JavaRobot:Java学习笔记,JavaLearningNote

    ConcurrentHashMap TreeMap Hashtable Set源码系列 HashSet LinkedHashSet TreeSet HashSet Concurrent源码系列 待完善 JVM(Java虚拟机) 类加载 垃圾回收算法 JavaConcurrent(Java并发系列) 【Java并发系列】

    Java面试题-哈希.docx

    接着,文件讨论了负载因子的概念及其取值为0.75的原因,以及HashMap在多线程环境下的线程安全性问题,指出了可能导致CPU利用率达到100%的并发扩容问题,并提出了解决方案。 此外,文件介绍了哈希冲突的概念和解决...

    java7hashmap源码-learning-record:学习轨迹记录

    HashTable和HashMap的区别详解 LeetCode 27. 删除元素(Remove Element) 7月8号 7月5号 复习hashMap concurrentHashmap [LeetCode 70. 爬楼梯(Climbing Stairs).md](Java基础/数据结构与算法/LeetCode/LeetCode ...

    java7hashmap源码-to-be-architect:成为Java架构师,你应该学习这些

    java7 hashmap源码 to-be-architect to be a Java ...Map:ConcurrentHashMap、HashMap、HashTable 并发List Set:CopyOnWriteArrayList、CopyOnWriteArraySet、 ArrayList、 LinkedList Concurrent

    java8源码-putaoo.github.io:putao.github.io

    并发 JVM I/O Java 8 编程规范 网络 操作系统 Linux相关 数据结构与算法 数据结构 算法 数据库 MySQL Redis 系统设计 常用框架 Spring/SpringBoot ZooKeeper 权限认证 设计模式 数据通信 网站架构 面试指南 备战面试...

    java8源码-java-start::seedling::seedling::seedling:学习Java语法过程中的一些案例

    并发 JVM I/O Java 8 编程规范 网络 操作系统 Linux相关 数据结构与算法 数据结构 算法 数据库 MySQL Redis 系统设计 常用框架 Spring ZooKeeper 权限认证 设计模式 数据通信 网站架构 面试指南 备战面试 常见面试题...

    sesvc.exe 阿萨德

    本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。 HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk...

    javabitset源码-JerrySoundCode:杰瑞声码

    HashMap (done) Hashtable (done) Properties (done) LinkedHashMap (done) IdentityHashMap (done) TreeMap (done) WeakHashMap (done) 并发集合 ArrayBlockingQueue(done) LinkedBlockingDeque (done) ...

    Java服务器端开发面试.doc

    set, list, queue这些接口间的区别,set不可重复, arraylist的实现和linkedlist的实现区别,HashMap, HashTable。涉及到各种效率问题等,里面最好阅读一下源码 集合的遍历方法和使用iterator来遍历的区别,集合...

    Java容器.xmind

    高并发下性能最好的队列 无锁,采用CAS比较算法,核心参数(V,E,N) V:要更新的变量 E:预期值 N:新值 只有当V==E时,V=N;否则表示已被更新过,则取消当前操作 阻塞队列 BlockingQueue接口 void put(E e) 将指定元素...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【集合】HashMap与HashTable的区别 71 【多线程】什么是线程安全与非线程安全 72 【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态...

    java核心知识点整理.pdf

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM .........................

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics