大家好,我是伟伟。前段时间在RocketMQ的ISSUE上冲浪的时候,看到一个pr。虽然在RocketMQ网站上找到了,但是这个东西其实和RocketMQ没有任何关系。Pure是JDK的一个BUG。先问大家一个问题:LinkedBlockingQueue是线程安全的吗?这些都是老套路了,不能脱口而出,就该受罚。答案是:因为有这两个锁的存在,所以是线程安全的。但是在RocketMQ的某个场景中,LinkedBlockingQueue线程不安全的情况被稳定重现。先说结论:LinkedBlockingQueue的流遍历方式在多线程下存在一定的问题,可能会出现死循环。太有意思了,本文带你一探究竟。其实我不需要做DemoDemo。上面提到的PR的链接是这个:https://github.com/apache/roc...在这个链接里,已经有很多关于RocketMQ的讨论。不过中段有个外号areyouok的大佬一针见血,指出了问题所在。直接给出一个很简单的复现代码。并且RocketMQ的东西被完全剥离出来:俗话说,前人栽树,后人乘凉。既然看到了areyouok的代码,就直接拿来做demo进行演示。如果您不介意,为了表示我的尊重,我敢说:感谢雷老师的代码。先贴雷老师的代码,大家看完文章就可以实际操作了:publicclassTestQueue{publicstaticvoidmain(String[]args)throwsException{LinkedBlockingQueue