- 一直都不知道concurrenthashmap有什么实际的用处?先写个例子比较下hashmap和它。
- 方法用2000个线程下同一个key值,同步的话,应该最后的map的size为1,不同步可以大于1.Java Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public class HashMapSyn {
public static void main(String[] args) throws InterruptedException {
System.out.println(runMapPutAndSizeShouldBe1(new HashMap<String, String>(32)));
System.out.println(runMapPutAndSizeShouldBe1(new ConcurrentHashMap<String, String>(32)));
}
public static int runMapPutAndSizeShouldBe1(final Map<String, String> map) throws InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 2000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
map.put("1", "1");
}
}, "Thread inside " + i).start();
}
}
}, "Thread outside");
t.start();
t.join();
return map.size();
}
@Test
public void testHashMapNotSynchronize() throws InterruptedException {
Assert.assertEquals(1, runMapPutAndSizeShouldBe1(new ConcurrentHashMap<String, String>(32)));
Assert.assertNotSame(1, runMapPutAndSizeShouldBe1(new HashMap<String, String>(32)));
}
} - 当然,hashmap的最后可能测不出来,可以将hashmap拷到本来加Thread.sleep。Java Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
/** add sleep for test*/
try { Thread.sleep(1); } catch (InterruptedException e1) {}
addEntry(hash, key, value, i);
return null;
}
- 浏览: 550386 次
- 性别:
- 来自: 北京
最新评论
-
zxjlwt:
路过素人派http://surenpi.com
SWT 树的事件 SWT.Selection SWT.CHECK SWT.DefaultSelection -
hj01kkk:
1楼用法正解
JDK 7 中的 Fork/Join 模式 -
fish_no7:
使用 new SortTask().fork()
JDK 7 中的 Fork/Join 模式 -
wpf523:
mark
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数 -
uniquejava:
以前碰到过,估计是在icu包中实现了双击自动选中一段文本的功能 ...
java.lang.NoClassDefFoundError: com/ibm/icu/text/BreakIterator
相关推荐
HashMap,HashTable,ConcurrentHashMap之关联.docx
上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的capacity:当前数组容量
HashMap& ConcurrentHashMap 深度解析
涵盖绝大部分HashMap与ConcurrentHashMap的面试题 附带答案
java7-8中的 HashMap和ConcurrentHashMap全解析
java7-8中的 HashMap和ConcurrentHashMap全解析 如果你想了解底层的逻辑就来看看吧
Java利用ConcurrentHashMap实现本地缓存demo; 基本功能有缓存有效期、缓存最大数、缓存存入记录、清理线程、过期算法删除缓存、LRU算法删除、获取缓存值等功能。 复制到本地项目的时候,记得改包路径哦~
源码分析见我博文:http://blog.csdn.net/wabiaozia/article/details/50684556
下面小编就为大家带来一篇详谈HashMap和ConcurrentHashMap的区别(HashMap的底层源码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
多线程环境下,建议使用 ConcurrentHashMap,或者使用 Collections.synchronizedMap(hashMap) 将 HashMap 转成线程同步的。 只能使用关联的键来获取值。 HashMap 只能存储对象,所以基本数据类型应该使用其包装器...
ConcurrentHashMap是J.U.C(java.util.concurrent包)的重要成员,它是HashMap的一个线程安全的、支持高效并发的版本。在默认理想状态下,ConcurrentHashMap可以支持16个线程执行并发写操作及任意数量线程的读操作。...
如果我么需要有一个线程安全的HashMap,可以使用Collections.synchronizedMap(Map m)方法获得线程安全的HashMap,也可以使用ConcurrentHashMap类创建线程安全的map。 存储的元素在jdk1.7当中是Entry作为存储的
13.HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标? 14.HashMap 的长度为什么是2的幂次方? 15.HashMap 与 HashTable 有什么区别? 16.如何决定使用 HashMap 还是 TreeMap? 17.HashMap 和 ...
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
ConcurrentHashMap源码剖析
hashmap和hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用...而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
本文详述Java语言中的hashmap与concurrenthashmap,使用其他语言的朋友可做参考 首先我们先来看一下这几个类原码开头的部分 public class HashMap extends AbstractMap implements Map, Cloneable, Serializable ...
HashMap底层实现原理HashMap...具体来说,HashMap是非同步的,而HashTable是同步的。因此,在多线程环境下,HashTable比HashMap更安全,但是性能可能较差。此外,HashMap允许将null作为键和值使用,而HashTable不允许。
HashMap总结、面试资料!!(2020下半年) 包含:HashMap线程安全 + ConcurrentHashMap + HashMap + 源码分析 + jdk1.8的HashMap和ConcurrentHashMap。 欢迎下载学习
主要为大家详细分析了Java并发系列之ConcurrentHashMap源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下