使用ConcurrentLinkedQueue惨痛的教训
服务端原本有个定时任务对一个集合ArrayList 中的消息做处理。 因为考虑到处理消息是先进先出原则,所以优化的时候考虑改用ConcurrentLinkedQueue 当时没仔细深入研究过这个集合就匆匆上线了。结果刚上线第二天就出问题了。服务端一次优化演变成了一个缺陷,还好及时回退了版本,后果才不是很严重。
回退后对ConcurrentLinkedQueue 做了一个简单的测试代码如下:
- import java.util.concurrent.ConcurrentLinkedQueue;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class ConcurrentLinkedQueueTest {
- private static ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<Integer>();
- private static int count = 100000;
- private static int count2 = 2; // 线程个数
- private static CountDownLatch cd = new CountDownLatch(count2);
- public static void dothis() {
- for (int i = 0; i < count; i++) {
- queue.offer(i);
- }
- }
- public static void main(String[] args) throws InterruptedException {
- long timeStart = System.currentTimeMillis();
- ExecutorService es = Executors.newFixedThreadPool(4);
- ConcurrentLinkedQueueTest.dothis();
- for (int i = 0; i < count2; i++) {
- es.submit(new Poll());
- }
- cd.await();
- System.out.println("cost time "
- + (System.currentTimeMillis() - timeStart) + "ms");
- es.shutdown();
- }
- static class Poll implements Runnable {
- @Override
- public void run() {
- // while (queue.size()>0) {
- while (!queue.isEmpty()) {
- System.out.println(queue.poll());
- }
- cd.countDown();
- }
- }
- }
运行结果:
costtime 2360ms
改用while (queue.size()>0)后
运行结果:
cost time 46422ms
结果居然相差那么大,看了下ConcurrentLinkedQueue的API 原来.size() 是要遍历一遍集合的,难怪那么慢,所以尽量要避免用size而改用isEmpty().
总结了下, 在单位缺乏性能测试下,对自己的编程要求更加要严格,特别是在生产环境下更是要小心谨慎。
转载于:https://www.cnblogs.com/Free-Thinker/p/9802051.html
使用ConcurrentLinkedQueue惨痛的教训相关推荐
- 惨痛的教训,NSURL访问本地文件的问题
今天终于有空调试之前碰到但未解决的一个问题.问题是这样的:使用http将一个视频文件(mp4格式)下载到documents目录下,拿到这个路径,ios4.3sdk下,iphone模拟器上播放失败,提示 ...
- 2021华为3.19面试惨痛经验教训
目录 1.前言 2.复盘 3.经历 3.1模糊记忆 3.2思考 3.3编译原理 4.展望 1.前言 其它企业写简历的时候可以放飞自我,尽量的表现自己,但是面试华为的时候千万别把自己写的太强了,完全是提 ...
- 惨痛教训,事实证明ACER 4710无法使用双芯片的内置蓝牙
昨天从淘宝上淘了一个acer 4710用的内置蓝牙的连接线,然后根据[url]http://benyouhui.it168.com/viewthread.php?tid=711519[/url] 的帖 ...
- 蓝牙模块惨痛教训——模块与单片机串口的隔离(更新)
技术小白,感谢大家阅读和点赞!使用蓝牙模块也有段时间了,更新-- 现在市面上用的蓝牙芯片大部分是ble的了,也就是低功耗透传模式.最近用到蓝牙SOC(片上系统),和大家分享下. 我们平时用蓝牙,一般是 ...
- 使用Save To Notion 保存豆瓣书籍或电影的惨痛教训/Save to Notion保存豆瓣电影不显示封面
文章源地址 源起 大概几天前,我用浏览器访问自己的博客的时候,突然发现Movie Library里封面图全挂了,但是Book Library 和 Game Library封面图都没事. 我以为这次和8 ...
- Compute Goes Brrr:重温强化学习之父Sutton关于AI的70年惨痛教训
导语:所以,"惨痛教训"是对是错?可能既不是这边,也不是那边. 译者:AI研习社(Key) 双语原文链接:Compute Goes Brrr: Revisiting Sutton' ...
- Android窗口 dimiss失效问题 惨痛教训啊
最近在做一个TV项目,也是Android系统,界面问题可真是把我搞惨了.好多地方和手机还是差别蛮大的,一些手机上固有的经验不能直接移植过去. 不扯闲话了.这两天遇到一个PopWindow.Dialog ...
- 覆盖libc.so.6的惨痛教训
覆盖libc.so.6的惨痛教训 背景 问题 原因 解决 1.当前session未断开 2.OS崩溃重启,所有ssh session断开 惨痛教训 1.对于上产环境的内核依赖库文件不能随意覆盖.删除. ...
- 作为 SaaS 初创公司产品负责人,我学到了 5 条经验教训!
作者 | Timoté Geimer 译者 | Arvin,责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 写在前面 我在2011年第 ...
最新文章
- mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
- 计算机考试题选择,(计算机考试题选择.doc
- Java IO (二),常见的输入/输出流
- Windows IIS配置Jsp和php环境方法
- 为安装好的SSAS实例重命名
- java 列表展开方式_android列表控件实现展开、收缩功能
- oracle 如何迁移到 mysql_怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL...
- 自适应关于帧场编码问题
- mfc this指针
- HTML5 history新特性pushState、replaceState,popstate
- 学习Linux的途径。
- Quartus II下进行SignalTap仿真
- linux抓包操作,linux/windows常用抓包分析操作
- USB设备仿真框架设计指南——10.用USB设备模拟器测试USB驱动程序
- win2003 R2 SP2 x64 可用密钥
- openwrt 添加usb网卡_树莓派安装OpenWrt教程
- mvc2 mvc_迅捷的MVC
- R语言lowess函数数据平滑实战(Locally Weighted Regression, Loess)
- 基于三维卷积网络的时空特征学习
- 基于ACF多通道特征的人脸检测——从原理到实现