服务端原本有个定时任务对一个集合ArrayList 中的消息做处理。 因为考虑到处理消息是先进先出原则,所以优化的时候考虑改用ConcurrentLinkedQueue 当时没仔细深入研究过这个集合就匆匆上线了。结果刚上线第二天就出问题了。服务端一次优化演变成了一个缺陷,还好及时回退了版本,后果才不是很严重。

回退后对ConcurrentLinkedQueue 做了一个简单的测试代码如下:

[java] view plain copy
  1. import java.util.concurrent.ConcurrentLinkedQueue;
  2. import java.util.concurrent.CountDownLatch;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. public class ConcurrentLinkedQueueTest {
  6. private static ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<Integer>();
  7. private static int count = 100000;
  8. private static int count2 = 2; // 线程个数
  9. private static CountDownLatch cd = new CountDownLatch(count2);
  10. public static void dothis() {
  11. for (int i = 0; i < count; i++) {
  12. queue.offer(i);
  13. }
  14. }
  15. public static void main(String[] args) throws InterruptedException {
  16. long timeStart = System.currentTimeMillis();
  17. ExecutorService es = Executors.newFixedThreadPool(4);
  18. ConcurrentLinkedQueueTest.dothis();
  19. for (int i = 0; i < count2; i++) {
  20. es.submit(new Poll());
  21. }
  22. cd.await();
  23. System.out.println("cost time "
  24. + (System.currentTimeMillis() - timeStart) + "ms");
  25. es.shutdown();
  26. }
  27. static class Poll implements Runnable {
  28. @Override
  29. public void run() {
  30. //          while (queue.size()>0) {
  31. while (!queue.isEmpty()) {
  32. System.out.println(queue.poll());
  33. }
  34. cd.countDown();
  35. }
  36. }
  37. }

运行结果:

costtime 2360ms

改用while (queue.size()>0)后

运行结果:

cost time 46422ms

结果居然相差那么大,看了下ConcurrentLinkedQueue的API 原来.size() 是要遍历一遍集合的,难怪那么慢,所以尽量要避免用size而改用isEmpty().

总结了下, 在单位缺乏性能测试下,对自己的编程要求更加要严格,特别是在生产环境下更是要小心谨慎。

转载于:https://www.cnblogs.com/Free-Thinker/p/9802051.html

使用ConcurrentLinkedQueue惨痛的教训相关推荐

  1. 惨痛的教训,NSURL访问本地文件的问题

    今天终于有空调试之前碰到但未解决的一个问题.问题是这样的:使用http将一个视频文件(mp4格式)下载到documents目录下,拿到这个路径,ios4.3sdk下,iphone模拟器上播放失败,提示 ...

  2. 2021华为3.19面试惨痛经验教训

    目录 1.前言 2.复盘 3.经历 3.1模糊记忆 3.2思考 3.3编译原理 4.展望 1.前言 其它企业写简历的时候可以放飞自我,尽量的表现自己,但是面试华为的时候千万别把自己写的太强了,完全是提 ...

  3. 惨痛教训,事实证明ACER 4710无法使用双芯片的内置蓝牙

    昨天从淘宝上淘了一个acer 4710用的内置蓝牙的连接线,然后根据[url]http://benyouhui.it168.com/viewthread.php?tid=711519[/url] 的帖 ...

  4. 蓝牙模块惨痛教训——模块与单片机串口的隔离(更新)

    技术小白,感谢大家阅读和点赞!使用蓝牙模块也有段时间了,更新-- 现在市面上用的蓝牙芯片大部分是ble的了,也就是低功耗透传模式.最近用到蓝牙SOC(片上系统),和大家分享下. 我们平时用蓝牙,一般是 ...

  5. 使用Save To Notion 保存豆瓣书籍或电影的惨痛教训/Save to Notion保存豆瓣电影不显示封面

    文章源地址 源起 大概几天前,我用浏览器访问自己的博客的时候,突然发现Movie Library里封面图全挂了,但是Book Library 和 Game Library封面图都没事. 我以为这次和8 ...

  6. Compute Goes Brrr:重温强化学习之父Sutton关于AI的70年惨痛教训

    导语:所以,"惨痛教训"是对是错?可能既不是这边,也不是那边. 译者:AI研习社(Key) 双语原文链接:Compute Goes Brrr: Revisiting Sutton' ...

  7. Android窗口 dimiss失效问题 惨痛教训啊

    最近在做一个TV项目,也是Android系统,界面问题可真是把我搞惨了.好多地方和手机还是差别蛮大的,一些手机上固有的经验不能直接移植过去. 不扯闲话了.这两天遇到一个PopWindow.Dialog ...

  8. 覆盖libc.so.6的惨痛教训

    覆盖libc.so.6的惨痛教训 背景 问题 原因 解决 1.当前session未断开 2.OS崩溃重启,所有ssh session断开 惨痛教训 1.对于上产环境的内核依赖库文件不能随意覆盖.删除. ...

  9. 作为 SaaS 初创公司产品负责人,我学到了 5 条经验教训!

    作者 | Timoté Geimer 译者 | Arvin,责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 写在前面 我在2011年第 ...

最新文章

  1. mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
  2. 计算机考试题选择,(计算机考试题选择.doc
  3. Java IO (二),常见的输入/输出流
  4. Windows IIS配置Jsp和php环境方法
  5. 为安装好的SSAS实例重命名
  6. java 列表展开方式_android列表控件实现展开、收缩功能
  7. oracle 如何迁移到 mysql_怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL...
  8. 自适应关于帧场编码问题
  9. mfc this指针
  10. HTML5 history新特性pushState、replaceState,popstate
  11. 学习Linux的途径。
  12. Quartus II下进行SignalTap仿真
  13. linux抓包操作,linux/windows常用抓包分析操作
  14. USB设备仿真框架设计指南——10.用USB设备模拟器测试USB驱动程序
  15. win2003 R2 SP2 x64 可用密钥
  16. openwrt 添加usb网卡_树莓派安装OpenWrt教程
  17. mvc2 mvc_迅捷的MVC
  18. R语言lowess函数数据平滑实战(Locally Weighted Regression, Loess)
  19. 基于三维卷积网络的时空特征学习
  20. 基于ACF多通道特征的人脸检测——从原理到实现

热门文章

  1. 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
  2. JS事件、对象基础篇
  3. 支持向量回归预测怎么做_机器学习如何在油气开发预测中发挥作用?
  4. YUV格式学习:NV12和YUV420P格式互换
  5. Linux内核生成版本号的一些研究
  6. 一个while的小小问题
  7. Day9 深度学习入门
  8. 【Elasticsearch】 es join 多表关联如何设计
  9. 「kafka」kafka增加主分区
  10. 【zookeeper】zookeeper shell 删除路径 卡死