java-并发集合-并发队列 ConcurrentLinkedQueue 演示
来源:互联网 发布:淘宝类目搜索排名 编辑:程序博客网 时间:2024/05/19 19:56
java-并发集合-并发队列 ConcurrentLinkedQueue 演示
目标:模拟 5 个线程同时并发读取“并发队列”,并使用 CountDownLatch 类协助计算消费耗时。
目标:模拟 5 个线程同时并发读取“并发队列”,并使用 CountDownLatch 类协助计算消费耗时。
package me.grass.demo.concuronte;import java.util.Date;/** * 同步队列 java.util.concurrent.ConcurrentLinkedQueue 使用 * */public class ConcurrentLinkedQueueDemo {/** * 生产者快,消费者慢 * @param args * @throws InterruptedException * @author xxj */public static void main(String[] args) throws InterruptedException {LinkedBlockingQueueDemo._lCountDownLatch.countDown();Date before=new Date();int pTotalThread =100; //最大线程数(生产者)int cTotalThread =5; //活动线程数(消费者)int pActivities=50; //最大线程数(生产者)int cActivities=5; //活动线程数(消费者)_lCountDownLatch = new CountDownLatch(pTotalThread+cTotalThread);startProducer(pActivities,pTotalThread);startConsumer(cActivities,cTotalThread);_lCountDownLatch.await();//等待所有线程完成Date after = new Date();System.out.println("队列为空:"+_queue.isEmpty());System.out.println("耗时:"+((after.getTime()-before.getTime())/1000));System.out.println("同步队列:"+_lCountDownLatch.getCount());}static java.util.concurrent.CountDownLatch _lCountDownLatch;static java.util.concurrent.ConcurrentLinkedQueue<Integer> _queue = new ConcurrentLinkedQueue<Integer>();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);}}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 * */static class producer implements Runnable{public producer(int key,int size){_size=size;_key=key;}int _key;int _size;public void run() {ConcurrentLinkedQueueDemo._queue.add(_key);//生产System.out.println("已创建:"+_key);ConcurrentLinkedQueueDemo._lCountDownLatch.countDown();//线程同步递减}}/** * 消费者 * @author xxj * */static class consumer implements Runnable{public consumer(){}public void run() {//循环消费,直到队列内容为空while(!ConcurrentLinkedQueueDemo._queue.isEmpty()){Integer nInteger = ConcurrentLinkedQueueDemo._queue.poll();//消费System.err.println("消费:"+nInteger);try {Thread.sleep(200);//每次消费等一会儿} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}ConcurrentLinkedQueueDemo._lCountDownLatch.countDown();//线程同步递减}}}
阅读全文
0 0
- java-并发集合-并发队列 ConcurrentLinkedQueue 演示
- java-并发集合-阻塞队列 LinkedBlockingQueue 演示
- Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析
- Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析
- 《并发编程》--16.并发队列ConcurrentLinkedQueue
- Java 并发 --- 非阻塞队列之ConcurrentLinkedQueue源码分析
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue
- Java并发容器之ConcurrentLinkedQueue
- java-并发集合-并发hash表 ConcurrentHashMap 演示
- java并发--并发集合
- Java多线程 阻塞队列和并发集合
- Java多线程阻塞队列和并发集合
- Java多线程 阻塞队列和并发集合
- Java多线程 阻塞队列和并发集合
- Java多线程 阻塞队列和并发集合
- Java多线程 阻塞队列和并发集合
- Java多线程 阻塞队列和并发集合
- 通过PL/SQL创建序列和触发器实现表自增字段
- JavaScript面向对象编程
- 输入一个链表,反转链表后,输出链表的所有元素。
- list集合为空或为null的区别
- 无apk加壳无防护app是有多危险,看了几维安全专业检测你就知道了
- java-并发集合-并发队列 ConcurrentLinkedQueue 演示
- C 和C++的 回调 函数
- 基本的增删改查
- 今日小程序推荐:查名宝-取好名,创好业!
- 已有项目依赖cordovaLib打包后调用插件崩溃问题
- js遍历树算出树的深度
- RabbitMQ的权限设置
- 原码补码反码——复习
- python 列出目录下的文件