unlock() { locked.set(false); LockSupport.unpark(waiters.peek()); } } 神秘的Unsafe,JSR166 增加了哪些内容 心细的你可能发现了LockSupport最终还是基于Unsafe的park和unpark来实现的,Unsafe在JDK1.5之前就存在的,那JSR166后增加了哪些内容呢? http://hg.openjdk.java.net/ 首先定位到Unsafe.cpp,文件位置在:openjdk\hotspot\src\share\vm\prims\Unsafe.cpp,会发现和JSR166 根据这些信息,得知JSR166在Unsafe中新增了五个方法,分别是compareAndSwapObject、compareAndSwapInt、compareAndSwapLong、park、unpark 最后我们看下park和unpark的具体实现,在学校学的C语言丢的差不好多了,但是下面的代码还语义还是很清晰的 // JSR166 // --------------------------------
这显然不够优雅,于是在 JSR166(java 规范提案)中创建了 AQS,提供了这种通用的同步器机制。
官方解释如下: As probably the last little JSR166 follow-up for Mustang, we added a "lazySet" method to the
// JSR166 per-thread parker private: Parker* _parker; 再看park的实现 void Parker::park(bool isAbsolute
这个库极大的降低了并发编程的难度, 其作者就是并发编程的权威Doug Lea, 他是纽约州立大学Oswego分校计算机科学系教授, JCP(Java Community Process)执行委员会成员,JSR166
util.concurrent 程序包构成了 JSR166 的基础;JSR166 已经开发了一个包含在 Java 1.5 版中的并发实用程序,而 Java 1.5 版将把这些 Map 包含在一个新的 java.util.concurrent
这个库极大的降低了并发编程的难度,其作者就是并发编程的权威 Doug Lea ,他是纽约州立大学 Oswego 分校计算机科学系教授, JCP ( Java Community Process )执行委员会成员, JSR166
此外,他还是JSR166的发起人之一(该JSR由Doug Lea领导),并且是许多其他JSR的参与者。Joshua目前是JCP为数不多的几个执行委员会成员之一。
最后,Martin 同学说他已经提交给了 jsr166,预计在 JDK 9 版本进行修复。
此外,他还是JSR166的发起人之一(该JSR由Doug Lea领导),并且是许多其他JSR的参与者。Joshua目前是JCP为数不多的几个执行委员会成员之一。
的解决 其实彻底理解了这个 Bug 之后,我们再来看一下 JDK 9 里面的解决方案,看一下官方源码对比: http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166
的解决 其实彻底理解了这个 Bug 之后,我们再来看一下 JDK 9 里面的解决方案,看一下官方源码对比: http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166
这显然不够优雅,于是在 JSR166(java 规范提案)中创建了 AQS,提供了这种通用的同步器机制。