答案 0 :(得分:53)
在mishadoff的博客上有一篇很好的帖子:http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/。该课程正式无证。
答案 1 :(得分:7)
关于 putOrdered 方法..
您可以调用此方法来设置volatile字段而不使用volatile存储。如果执行volatile存储,您基本上有一个存储内存屏障,可确保所有存储指令在屏障之前,发生在屏障和内存之前通过确保数据传播到缓存子系统是可见的。所以当你有volatile存储时,你必须等待存储缓冲区耗尽..使用 putOrdered 线程执行不会等待存储缓冲区以排出,这可以提高性能。但是,因此存储的值不会立即对其他线程可见..
如果您查看 AtomicLong (或其他Atomic类),则会有一个实际执行putOrderedLong的 lazySet 方法。这个方法的javadoc是:
最终设置为给定值。