首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
foreach
controller
golang
数组
bash
jar
node.js
client
format
go
sum
default
import
ip
replace
cPlusPlus
vbscript
erlang
subset
io
hashtable
actionscrip
cookie
integer
post
expression
cpython
request
hashcode
main
rsa
byte
shell
tags
header
usb
hashset
window
tree
dagger
vba
command
join
blob
bytecode
int
settings
utf-8
email
dll
solr
frameworks
triggers
cSharp
php7
future
match
function
uml
flutter
heatmap
c语言
process
iostream
timezone
case
copy
spring
fetch
python3
keyword
char
php5
metadata
stream
schema
js
range
express
当前位置:
开发笔记
>
编程语言
> 正文
HashMap和ConcurrentHashMap的并发性能测试
作者:mobiledu2502894591 | 来源:互联网 | 2023-05-17 02:18
原文:http:www.java2000.netp12427先看看代码吧,模拟1000个并发,每个测试1000次操作,循环测试10轮。分别测试Put和Get操作importjava.util.
原文:http://www.java2000.net/p12427
先看看代码吧,模拟1000个并发,每个测试1000次操作,循环测试10轮。分别测试Put和Get操作
import
java.util.Collections;
import
java.util.HashMap;
import
java.util.Hashtable;
import
java.util.Map;
import
java.util.concurrent.ConcurrentHashMap;
/**
* 测试HashMap和ConcurrentHashMap的并发性能差别。
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
public
class
T {
static
final
int
threads =
1000
;
static
final
int
NUMBER =
1000
;
public
static
void
main(String[] args)
throws
Exception {
Map
hashmapSync = Collections
.synchronizedMap(
new
HashMap
());
Map
concurrentHashMap =
new
ConcurrentHashMap
();
Map
hashtable =
new
Hashtable
();
long
totalA =
0
;
long
totalB =
0
;
long
totalC =
0
;
for
(
int
i =
0
; i <=
10
; i++) {
totalA += testPut(hashmapSync);
totalB += testPut(concurrentHashMap);
totalC += testPut(hashtable);
}
System.out.println(
"Put time HashMapSync="
+ totalA +
"ms."
);
System.out.println(
"Put time COncurrentHashMap="
+ totalB +
"ms."
);
System.out.println(
"Put time Hashtable="
+ totalC +
"ms."
);
totalA =
0
;
totalB =
0
;
totalC =
0
;
for
(
int
i =
0
; i <=
10
; i++) {
totalA += testGet(hashmapSync);
totalB += testGet(concurrentHashMap);
totalC += testGet(hashtable);
}
System.out.println(
"Get time HashMapSync="
+ totalA +
"ms."
);
System.out.println(
"Get time COncurrentHashMap="
+ totalB +
"ms."
);
System.out.println(
"Get time Hashtable="
+ totalC +
"ms."
);
}
public
static
long
testPut(Map
map)
throws
Exception {
long
start = System.currentTimeMillis();
for
(
int
i =
0
; i < threads; i++) {
new
MapPutThread(map).start();
}
while
(MapPutThread.counter >
0
) {
Thread.sleep(
1
);
}
return
System.currentTimeMillis() - start;
}
public
static
long
testGet(Map
map)
throws
Exception {
long
start = System.currentTimeMillis();
for
(
int
i =
0
; i < threads; i++) {
new
MapPutThread(map).start();
}
while
(MapPutThread.counter >
0
) {
Thread.sleep(
1
);
}
return
System.currentTimeMillis() - start;
}
}
class
MapPutThread
extends
Thread {
static
int
counter =
0
;
static
Object lock =
new
Object();
private
Map
map;
private
String key =
this
.getId() +
""
;
MapPutThread(Map
map) {
synchronized
(lock) {
counter++;
}
this
.map = map;
}
public
void
run() {
for
(
int
i =
1
; i <= T.NUMBER; i++) {
map.put(key, i);
}
synchronized
(lock) {
counter--;
}
}
}
class
MapGetThread
extends
Thread {
static
int
counter =
0
;
static
Object lock =
new
Object();
private
Map
map;
private
String key =
this
.getId() +
""
;
MapGetThread(Map
map) {
synchronized
(lock) {
counter++;
}
this
.map = map;
}
public
void
run() {
for
(
int
i =
1
; i <= T.NUMBER; i++) {
map.get(key);
}
synchronized
(lock) {
counter--;
}
}
}
运行结果:
Put time HashMapSync=3966ms.
Put time COncurrentHashMap=1892ms.
Put time Hashtable=3892ms.
Get time HashMapSync=3812ms.
Get time COncurrentHashMap=1828ms.
Get time Hashtable=3985ms.
结论:
ConcurrentHashMap的性能比同步的HashMap快一倍左右
同步的HashMap和Hashtable的性能相当
hash
hashmap
并发
http
java
get
import
io
static
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
main
Java容器中的compareto方法排序原理解析
本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ...
[详细]
蜡笔小新 2023-12-14 13:53:31
main
Java中包装类的设计原因以及操作方法
本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ...
[详细]
蜡笔小新 2023-12-12 15:48:10
main
Java太阳系小游戏分析和源码详解
本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ...
[详细]
蜡笔小新 2023-12-14 19:53:34
main
在类中定义数组时出错 - Error on defining arrays in class
Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ...
[详细]
蜡笔小新 2023-12-14 17:38:12
main
JavaSE笔试题-接口、抽象类、多态等问题解答
本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ...
[详细]
蜡笔小新 2023-12-14 10:01:13
main
关于cuowu类的错误提示和使用AdjustmentListener的问题
本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ...
[详细]
蜡笔小新 2023-12-13 22:09:56
main
Java中vector的使用详解
本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ...
[详细]
蜡笔小新 2023-12-13 14:14:39
main
Java学习笔记之面向对象编程(OOP)
本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ...
[详细]
蜡笔小新 2023-12-13 08:44:30
main
java boolean 大小_java boolean 大小
先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ...
[详细]
蜡笔小新 2023-12-12 13:36:56
main
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ...
[详细]
蜡笔小新 2023-12-14 12:40:20
main
Java高并发程序设计学习-线程安全的概念与synchronized
本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ...
[详细]
蜡笔小新 2023-12-13 15:43:03
main
Java实现大数乘法(分治算法)
本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ...
[详细]
蜡笔小新 2023-12-14 15:43:50
main
Java猜拳小游戏代码
本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ...
[详细]
蜡笔小新 2023-12-14 15:39:08
io
开发笔记:加密&json&StringIO模块&BytesIO模块
篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ...
[详细]
蜡笔小新 2023-12-14 15:18:35
main
实现下拉列表,点击其他位置自动隐藏效果的三种方式比较
目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ...
[详细]
蜡笔小新 2023-12-14 15:03:14
mobiledu2502894591
这个家伙很懒,什么也没留下!
Tags | 热门标签
foreach
controller
golang
数组
bash
jar
node.js
client
format
go
sum
default
import
ip
replace
cPlusPlus
vbscript
erlang
subset
io
hashtable
actionscrip
cookie
integer
post
expression
cpython
request
hashcode
main
RankList | 热门文章
1
知网查重报告如何看
2
关于memcache的存储问题。
3
linux删除目录tmpab是什么意思_几种删除Linux目录的方法
4
使用GitHub进行版本管理的过程
5
洛谷 P1196 NOI2002 银河英雄传说
6
最小生成树的一些性质和理解
7
土豪|宿主_深入浅出DevOps:Jenkins实战之CI
8
美国本科计算机专业,关于美国本科计算机专业你了解多少
9
5G消息加速商用落地 或成首批5G应用
10
在Azure的云合作伙伴门户中禁用要提供的预览阶段
11
Mysql 学习步骤
12
如何实现rateLimiter的配置使用
13
日生读孙子[1]: 软件工程
14
mysql进阶(十一)外键在数据库中的作用
15
酷狗音乐下载歌曲到u盘的方法
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有