ConcurrentLinkedQueue 和CountDownLatch 的使用
来源:互联网 发布:冰川网络不败传说官网 编辑:程序博客网 时间:2024/05/18 12:40
ConcurrentLinkedQueue 和CountDownLatch 的使用
package com.chow.queue;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by zhouhaiming on 2017-5-26 17:22 * Email: dg_chow@163.com * * @Description: */public class ConcurrentLinkedQueueTest { private static ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<Integer>(); private static int count = 2; // 线程个数 //CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 private static CountDownLatch latch = new CountDownLatch(count); public static void main(String[] args) throws InterruptedException { long timeStart = System.currentTimeMillis(); ExecutorService es = Executors.newFixedThreadPool(4); ConcurrentLinkedQueueTest.offer(); for (int i = 0; i < count; i++) { es.submit(new Poll()); } latch.await(); //使得主线程(main)阻塞直到latch.countDown()为零才继续执行 System.out.println("cost time " + (System.currentTimeMillis() - timeStart) + "ms"); es.shutdown(); } /** * 生产 */ public static void offer() { for (int i = 0; i < 5; i++) { queue.offer(i); } } /** * 消费 */ static class Poll implements Runnable { public void run() { // while (queue.size()>0) { while (!queue.isEmpty()) { System.out.println(queue.poll()); } latch.countDown(); } }}/*运行结果: costtime 2360ms 改用while (queue.size()>0)后 运行结果: cost time 46422ms 结果居然相差那么大,看了下ConcurrentLinkedQueue的API原来.size()是要遍历一遍集合的,难怪那么慢,所以尽量要避免用size而改用isEmpty().*/
阅读全文
0 0
- ConcurrentLinkedQueue 和CountDownLatch 的使用
- java队列BlockingQueue和ConcurrentLinkedQueue多线程并发、以及CountDownLatch与CyclicBarrier的使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- CountDownLatch的介绍和使用
- log4j初始化和slf4j
- java将经纬度转换为平面坐标
- JDBC
- BZOJ 1088 模拟
- linux--环境变量(linux进程内存管理)
- ConcurrentLinkedQueue 和CountDownLatch 的使用
- android studio使用依赖引入jar的存放位置
- 数列
- redis和hbase可视化工具介绍
- springboot项目部署
- 全球访问无障碍 阿里云直播全球加速正式开放试用
- 利用Cookie显示最近浏览的商品
- Android之build.prop
- Redis常用命令(5)SortKey类型