lazySet是使用Unsafe.putOrderedObject方法,这个方法在对低延迟代码是很有用的,它能够实现非堵塞的写入,这些写入不会被Java的JIT重新排序指令(instruction reordering),这样它使用快速的存储-存储(store-store) barrier, 而不是较慢的存储-加载(store-load) barrier, 后者总是用在volatile的写操作上,这种性能提升是有代价的,虽然便宜,也就是写后结果并不会被其他线程看到,甚至是自己的线程,通常是几纳秒后被其他线程看到,这个时间比较短,所以代价可以忍受。
类似Unsafe.putOrderedObject还有unsafe.putOrderedLong等方法,unsafe.putOrderedLong比使用 volatile long要快3倍左右。.
所以还是一个速度的问题,据传别人的测试,使用synchronized 的速度仅比volatile慢一倍,所以这里的快3倍还是很有价值的。
相关推荐
并发编程-volatile使用精讲.pdf
java里的volatile关键字详解.pdf
开源项目-volatile-core.zip,Volatile — A new minimalist web framework
Volatile的陷阱
单片机C语言编程中volatile使用示范,有详细的注释说明,文字讲解以及示例程序。
C语言中auto,register,static,const,volatile的区别
This document describes tokens and shows how to use them for non-volatile data storage in EmberZNet PRO.
Init the given _EGLconfig to default values. \param id the configuration s ID.
VB编写的DS1994读写程序,DS1994是带有时钟功能的信息钮扣,运用范围很广泛,
如何使用我们的低延迟有界队列之一的示例。 // writer thread Executors.newSingleThreadExecutor().execute(new Runnable() { @Override public void run() { queue.add(1); } }); // reader thread Executors...
volatile 的字面含义是易变的,那么将一个变量指示为volatile 是什么意思呢?是告诉编 译器这个变量是易变的?事实上也是如此。在多任务、中断等环境下,变量可能被其他的任 务改变,而编译器无法发现,volatile ...
java入门教程:数据类型_Java理论与实践如何正确使用Volatile变量.docx
C语言常见的关键字volatile的使用以及它的两个基本用法。 1.确保本条指令不会因编译器的优化而省略 2.提醒编译器它后面所定义的变量随时都有可能改变
深入理解 volatile 关键字.doc
ISSCC2021_Session_30V_Non-Volatile Memory.pdf
C程序中volatile关键字的使用.方法及其例程介绍。
Volatile只是C里的一个关键字,为什么需要这个关键字?它有什么作用?一般的讲,只要把一个变量声明为Volatile,也就表示这个变量会出现意想不到的改变,这个时候编译器就不会去假设该变量的值,从而,优化器每次...
多方面解读Java中的volatile关键字.rar
volatile关键字基本介绍 volatile可以看成是synchronized的一种轻量级的实现,但volatile并不能完全代替synchronized,volatile有synchronized可见性的...另外,使用volatile还能确保变量不能被重排序,保证了有序性。
volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)