验证Hashmap不支持同步,ConcurrentHashMap支持
程序员文章站
2022-04-20 14:54:53
...
- 一直都不知道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;
}
推荐阅读
-
开源版 nignx 不支持 ntml 验证
-
开源版 nignx 不支持 ntml 验证
-
ConcurrentHashMap不支持null
-
华为P50可复制90%门禁卡:硬件限制Mate40暂不支持、可云同步实现
-
MySQL 5.5.3 m3 主从同步不支持master-host问题的解决办法
-
MySQL 5.5.3 m3 主从同步不支持master-host问题的解决办法
-
Mysql-5.5.3主从同步不支持master-host问题的解决办法_MySQL
-
Mysql-5.5.3主从同步不支持master-host问题的解决办法_MySQL
-
验证Hashmap不支持同步,ConcurrentHashMap支持
-
ConcurrentHashMap不支持null