0 0

ConcurrenthashMap如何实现并发操作10

请教一个问题,

首先在ConcurrenthashMap中预置10万条测试数据

1,我如何使用一个线程对ConcurrenthashMap作操作,先get(key),接着remove(key),直到所有数据remove,记录一下所有时间

2,我如何使用多个线程(3个线程)对ConcurrenthashMap作上面同样的操作,我需要得到两种处理方式所使用的时间


希望能给我简单的demo,谢谢了,小弟线上等待。。。

问题补充:求帮忙!!!
2013年4月09日 14:56

2个答案 按时间排序 按投票排序

0 0

采纳的答案

public class ConcurrentHashMapTest {

/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
ConcurrentHashMap<Integer,String> map = new ConcurrentHashMap<Integer,String>();
for(int i=0;i<10*10000;i++){
map.put(i, String.valueOf(i));
}

System.out.println("prepare test data of 10w");

new Consumer(map,1).start();

Thread.sleep(1000);
ConcurrentHashMap<Integer,String> map1 = new ConcurrentHashMap<Integer,String>();
for(int i=0;i<10*10000;i++){
map1.put(i, String.valueOf(i));
}
for(int i=0;i<3;i++){
new Consumer(map1,2).start();
}

}

}
class Consumer extends Thread{
ConcurrentHashMap<Integer,String> map;
int which;
public Consumer(ConcurrentHashMap<Integer,String> map,int which){
this.map = map;
this.which = which;
}
@Override
public void run() {
long start = System.currentTimeMillis();
for(Integer key : map.keySet()){
map.get(key);
map.remove(key);
}
System.out.println("The "+which+" cost "+(System.currentTimeMillis()-start)+"ms");
}

}

执行三次,发现单线程性能cost比较稳定,3个线程会有波动,按照最长时间的线程来看,有可能性能还不如single的,可见concurrenthashmap对于同步处理还是有一定的开销的
prepare test data of 10w for 1
The 1 cost 18ms
prepare test data of 10w for 2
The 2 cost 13ms
The 2 cost 14ms
The 2 cost 12ms

prepare test data of 10w for 1
The 1 cost 18ms
prepare test data of 10w for 2
The 2 cost 20ms
The 2 cost 19ms
The 2 cost 16ms

prepare test data of 10w for 1
The 1 cost 18ms
prepare test data of 10w for 2
The 2 cost 14ms
The 2 cost 13ms
The 2 cost 16ms

2013年4月09日 17:56
0 0

你这测试的肯定有问题,ConcurrenthashMap使用的分离锁,多线程不可能比单线程时间还长。

2013年4月11日 10:07

相关推荐

    ConcurrentHashMap的实现原理

    ConcurrentHashMap 的实现原理使得它具有很高的并发能力,在高并发情况下,ConcurrentHashMap 的性能要比普通的 HashMap 好很多。同时,ConcurrentHashMap 也提供了非常好的线程安全性,能够确保多个线程同时访问 ...

    ConcurrentHashMap思维导图完整版

    本文将结合Java内存模型,分析JDK源代码,探索ConcurrentHashMap高并发的具体实现机制,包括其在JDK中的定义和结构、并发存取、重哈希和跨段操作,并着重剖析了ConcurrentHashMap读操作不需要加锁和分段锁机制的内在...

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

    总之,ConcurrentHashMap通过锁分离技术和细粒度的并发控制,实现了在多线程环境下的高效并发访问。它在保证数据一致性的同时,避免了全表锁定,从而提升了并发性能,是Java并发编程中不可或缺的工具。

    ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

    ConcurrentHashMap 是为了应对 HashMap 在并发环境下不安全而诞生的,ConcurrentHashMap 的设计与实现非常精巧,大量的利用了 volatile,final,CAS 等 lock-free 技术来减少锁竞争对于性能的影响。...

    Java-并发容器之ConcurrentHashMap

    【Java并发容器之ConcurrentHashMap】是Java编程中用于高效并发操作的重要工具。相比于HashMap,ConcurrentHashMap在多线程环境下提供了线程安全的保证,避免了因扩容导致的CPU资源消耗过高问题。传统的线程安全解决...

    ConcurrentHashMap之实现细节

    ### ConcurrentHashMap实现细节详解 #### 一、概述 `ConcurrentHashMap`是Java 5引入的一种高性能、线程安全的散列表实现。相较于传统的`HashMap`,`ConcurrentHashMap`能够支持高并发环境下的多线程读写操作。...

    Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf

    ConcurrentHashMap 是 Java 并发集合框架中的一种 Hash 表实现,提供了高效的并发操作和线程安全机制。它可以同时支持多个线程的访问和更新操作,不会出现线程安全问题。 ConcurrentHashMap 的特点包括: * 高效的...

    Java中的ConcurrentHashMap:线程安全的哈希表实现与代码示例

    在Java的并发编程中,ConcurrentHashMap 是一个非常重要的组件,它提供了线程安全的HashMap实现。本文将深入探讨 ...如果需要全局有序性,可以考虑使用同步的Map实现,或者使用锁和其他同步工具来协调并发操作

    ConcurrentHashMap的实现原理(JDK1.7和JDK1.8).pdf

    总的来说,`ConcurrentHashMap`的设计是为了解决多线程环境下HashMap的线程安全问题,通过分段锁和CAS操作实现了高效并发的哈希表。从JDK1.7到1.8的演变,反映了并发编程中对性能和线程安全的不断追求。

    ConcurrentHashMap底层实现机制的分析1

    在本文中,我们将深入探索 ConcurrentHashMap 的高并发实现机制,并分析其在 Java 内存模型基础上的实现原理。了解 ConcurrentHashMap 的实现机制有助于我们更好地理解 Java 并发编程的原理和技术。 一、Java 内存...

    Java并发编程之ConcurrentHashMap.pdf

    `ConcurrentHashMap`是Java并发编程中的一个重要组件,它提供了一种线程安全的哈希表实现方式。与传统的`Hashtable`或`synchronized`关键字相比,`ConcurrentHashMap`的设计更高效、更灵活。它允许在读操作时不加锁...

    java集合-ConcurrentHashMap的使用

    ConcurrentHashMap使用了分段锁(Segment)来实现并发的读写操作,每个Segment都相当于一个小的HashMap,将整个哈希表分成多个部分。这样可以同时进行多个线程的并发读写操作,不会阻塞其他线程的访问。 需要注意的...

    java源码剖析-ConcurrentHashMap

    2. **非阻塞读操作**:`ConcurrentHashMap`允许读操作无需加锁,从而极大地提高了并发性。这意味着多个线程可以同时进行读取操作而不会受到其他写操作的影响。 #### 三、`ConcurrentHashMap`的内部结构 `...

    ConcurrentHashMap源码分析

    2. **非阻塞性操作**:许多读操作可以在不加锁的情况下执行,这使得`ConcurrentHashMap`在高并发场景下的性能表现更佳。 3. **灵活的线程安全机制**:与`HashTable`相比,`ConcurrentHashMap`提供了更加灵活的线程...

    java7-8中的 HashMap和ConcurrentHashMap全解析

    在Java 7中,`ConcurrentHashMap`采用了分段锁的设计,将整个哈希表分成若干个段(Segment),每个段有自己的锁,不同段之间可以并发操作,提高了并发性能。每个段内部再由数组和链表组成,类似于Java 7的`HashMap`...

    Java并发系列之ConcurrentHashMap源码分析

    ConcurrentHashMap是Java中一个高性能的哈希表实现,它解决了HashTable的同步问题,允许多线程同时操作哈希表,从而提高性能。 1. ConcurrentHashMap的成员变量: ConcurrentHashMap有多个成员变量,它们在初始化...

    第10讲 如何保证集合是线程安全的 ConcurrentHashMap如何实现高效地线程安全1

    ConcurrentHashMap的高效实现还依赖于许多并发控制技术,比如无锁数据结构(Lock-Free)、自旋锁(Spin Lock)、循环等待检测(CLH Lock)以及Compare and Swap (CAS)操作。这些技术使得ConcurrentHashMap在不牺牲太...

    ConcurrentHashMap源码剖析

    与传统的基于synchronized关键字实现线程安全的HashTable相比,ConcurrentHashMap通过采用锁分段技术显著提高了并发性能。本文将深入探讨ConcurrentHashMap的内部结构、工作原理及其在实际场景中的应用。 #### 二、...

Global site tag (gtag.js) - Google Analytics