Doug Lea在J.U.C包里面写的BUG又被网友发现了(1)

简介: Doug Lea在J.U.C包里面写的BUG又被网友发现了(1)

BUG描述


一个编号为 8073704 的 JDK BUG,将串联起我的这篇文章。


也就是下面的这个链接。


https://bugs.openjdk.java.net/browse/JDK-8073704


这个 BUG 在 JDK 9 版本中进行了修复。也就是说,如果你用的 JDK 8,也许会遇到这样的问题。


先带大家看看这个问题是怎么样的:


image.png


这个 BUG 说:FutureTask.isDone 方法在任务还没有完成的时候就会返回 true。


image.png


响应了国家政策:谁污染,谁治理。


这个 BUG 的作者 Martin 老哥是这样描述的:


image.png


下面我会给大家翻译一下他要表达的东西。


但是在翻译之前,我得先做好背景铺垫,以免有的朋友看了后一脸懵逼。


如果要懂他在说什么,那我必须得再给你看个图片,这是 FutureTask 的文档描述:


image.png


image.png


这样写的目的是除了判断了 NEW 状态之外,还判断了两个中间状态:COMPLETING 和 INTERRUPTING。


那么除去上面的三个状态之外呢,就只剩下了这四个状态:


image.png


image.png


而这几种中,只有 INTERRUPTING 是一个中间态,所以他用后面的 != 排除掉了。


这样就是代码简洁了,但是理解起来多转个小弯。但是这两段代码表示的含义是一模一样的。


好了,关于这个 BUG 的描述就是这样的。


汇总为一句话就是,这个 Martin 老哥认为:


FutureTask.isDone 方法在任务还没有完成的时候,比如还是 COMPLETING 和 INTERRUPTING 的时候就会返回 true,这样是不对的。这就是 BUG。


仅从 isDone 源码中那段 status != NEW 的代码,我认为这个 Martin 老哥说的确实没有问题。因为确实有两个中间态,这段源码中是没有考虑的。


接下来,我们就围绕着这个问题进行展开,看看各位大神的讨论。


image.png



目录
相关文章
|
8月前
|
Java 容器
阿里内部流传的JDK源码剖析手册!GitHub已获上千万的访问量
相信现在已经有很多小伙伴知道了“微软”要对JDK下手了! JDK是什么? jdk是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。jdk是整个java开发的核心,它包含了JAVA的运行环境和JAVA工具。相对而言,没有jdk的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
208 0
|
4天前
|
Java 关系型数据库 MySQL
太牛了! GitHub大牛呕心沥血整理的5000页Java学习手册文档
今天整理了一套 5000 页的 Java 学习手册,,新鲜出炉,分享给大家!此手册内容专注 Java技术,包括 JavaWeb,SSM,Linux,Spring Boot,MyBatis,MySQL,Nginx,Git,GitHub,Servlet,IDEA,多线程,集合,JVM,DeBug, Dubbo,Redis,算法,面试题等相关内容。
|
4天前
|
NoSQL Java Redis
阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+
互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000+道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了30K+
|
7月前
|
监控 Java 测试技术
No.7 一篇文章讲清楚golang内存泄漏
No.7 一篇文章讲清楚golang内存泄漏
239 1
No.7 一篇文章讲清楚golang内存泄漏
|
7月前
|
缓存 安全 Go
No.8 Golang开发新手常犯的50个错误(上)
No.8 Golang开发新手常犯的50个错误
|
7月前
|
JSON Go API
No.8 Golang开发新手常犯的50个错误(下)
No.8 Golang开发新手常犯的50个错误
|
8月前
|
设计模式 Dubbo Java
让GitHub低头认错的这份阿里内部绝密Java面试八股文手册有多强?
今天给大家分享出一份让大家上班摸鱼也可以随意看的阿里巴巴内部特供Java面试八股文手册,这份手册据说曾经也是让GitHub都为之低头的存在! 正所谓“旧时王谢堂前燕,飞入寻常百姓家”希望大家看完这份手册都可以拿上自己满意的offer!
|
存储 Rust 供应链
编写完10万行代码,我发了篇长文吐槽Rust
编写完10万行代码,我发了篇长文吐槽Rust
139 0
|
缓存 搜索推荐 容灾
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+ 中
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+ 中
83 0
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+   中
|
Java API
Doug Lea在J.U.C包里面写的BUG又被网友发现了(5)
Doug Lea在J.U.C包里面写的BUG又被网友发现了(5)
87 0
Doug Lea在J.U.C包里面写的BUG又被网友发现了(5)