java-并发集合-并发hash表 ConcurrentHashMap 演示
来源:互联网 发布:程序员的梦工厂 编辑:程序博客网 时间:2024/06/10 16:46
java-并发集合-并发hash表 ConcurrentHashMap 演示
package me.grass.demo.concurrent;import java.util.Date;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executors;/** * 并发集合 java.util.concurrent.ConcurrentHashMap 演示* 并发 10 个生产者产生数据,并发 5 个消费消费数据;调整活动线程数将减小处理时间* @author xxj */public class ConcurrentHashMapDemo {/** * 生产者快,消费者慢 * @param args * @throws InterruptedException * @author xxj */public static void main(String[] args) throws InterruptedException {Date before=new Date();int pTotalThread =100; //最大线程数(生产者)int pActivities=10; //最大线程数(生产者)int cTotalThread =50; //活动线程数(消费者)int cActivities=5; //活动线程数(消费者)_lCountDownLatch = new CountDownLatch(pTotalThread+cTotalThread);initKeys(pTotalThread);startProducer(pActivities,pTotalThread);startConsumer(cActivities,cTotalThread);_lCountDownLatch.await();//等待所有线程完成Date after = new Date();System.out.println("队列为空:"+_concurrentHashMap.isEmpty());System.out.println("耗时:"+((after.getTime()-before.getTime())/1000));System.out.println("同步队列:"+_lCountDownLatch.getCount());}private static java.util.concurrent.CountDownLatch _lCountDownLatch;private static java.util.concurrent.ConcurrentHashMap<Integer,Integer> _concurrentHashMap = new java.util.concurrent.ConcurrentHashMap<Integer,Integer>();private static java.util.concurrent.ConcurrentLinkedQueue<Integer> _keys =new ConcurrentLinkedQueue<Integer>();private static void initKeys(int size){for(int i=0;i<size;i++){_keys.add(i);}}private static void startProducer(int active,int totalThread) throws InterruptedException{java.util.concurrent.ExecutorService pool = Executors.newFixedThreadPool(active);int size =1024*1024*10;//产生 3 M 数据Thread thread ;for(int i=0;i<totalThread;i++){thread = new Thread(new producer(i,size));pool.execute(thread);}}private static void startConsumer(int active,int totalThread) throws InterruptedException{java.util.concurrent.ExecutorService pool = Executors.newFixedThreadPool(active);Thread thread ;//启动x个消费者for(int i=0;i<totalThread;i++){thread = new Thread(new consumer());pool.execute(thread);}}/** * 生产者 * @author xxj * */private static class producer implements Runnable{public producer(int key,int size){_size=size;_key=key;}int _key;int _size;public void run() {ConcurrentHashMapDemo._concurrentHashMap.put(_key,_key);//生产System.out.println("已创建:"+_key);ConcurrentHashMapDemo._lCountDownLatch.countDown();//线程同步递减try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/** * 消费者 * @author xxj * */private static class consumer implements Runnable{public consumer(){}public void run() {Integer key = 0;Integer nInteger=null;//循环消费,直到队列内容为空while(!ConcurrentHashMapDemo._concurrentHashMap.isEmpty() &&!ConcurrentHashMapDemo._keys.isEmpty()){key = ConcurrentHashMapDemo._keys.poll();//获取 keyif(ConcurrentHashMapDemo._concurrentHashMap.containsKey(key)){nInteger = ConcurrentHashMapDemo._concurrentHashMap.get(key);//消费}System.err.println("消费:"+nInteger);try {Thread.sleep(500);//每次消费等一会儿} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}ConcurrentHashMapDemo._lCountDownLatch.countDown();//线程同步递减}}}
阅读全文
0 0
- java-并发集合-并发hash表 ConcurrentHashMap 演示
- 了解Java并发集合ConcurrentHashMap
- java-并发集合-并发队列 ConcurrentLinkedQueue 演示
- 并发集合:ConcurrentHashMap
- java并发集合ConcurrentHashMap详解加源码
- java-并发集合-阻塞队列 LinkedBlockingQueue 演示
- java并发之ConcurrentHashMap
- java并发-concurrentHashMap
- java并发之ConcurrentHashMap
- java并发--并发集合
- java并发编程(二十二)----(JUC集合)ConcurrentHashMap介绍
- Java并发编程:并发容器之ConcurrentHashMap
- Java并发编程:并发容器之ConcurrentHashMap
- Java并发编程:并发容器之ConcurrentHashMap
- Java并发编程:并发容器之ConcurrentHashMap
- Java并发编程:并发容器之ConcurrentHashMap
- Java并发编程:并发容器之ConcurrentHashMap
- Java并发编程:并发容器之ConcurrentHashMap
- 利用for循环输出连在一起的两个平行四边形
- div使用margin:0 auto居中后,如何使子div实现流式布局
- sql多表查询以及时间的处理
- ButterKnife注入框架
- hdu 4424 并查集+分治/贪心 有些最大生成树的感觉
- java-并发集合-并发hash表 ConcurrentHashMap 演示
- 利用StringEscapeUtils对字符串进行各种转义与反转义(Java)
- 50 个 Java 开发常见错误及规避技巧 (Part 2)
- android进程间通信AIDL详解
- 设计模式之结构型-享元模式(11)
- xpath语法(一)
- Mac OS 配置Maven
- Qualcomm平台camera调试移植入门
- [Leetcode] 238. Product of Array Except Self 解题报告