Java关键字volatile修饰变量
来源:互联网 发布:淘宝店铺改名怎么改 编辑:程序博客网 时间:2024/05/21 07:59
volatile关键字的作用是告诉编译器,凡是被该关键字申明的变量都是易变的、不稳定的,所以不要试图对该变量使用缓存等优化机制,而应当每次都从他的内存地址中去读取值,但volatile并不是每次更改完就要立刻将他写回内存,volatile只提供了内存的可见性,并不提供原子性(与锁机制的区别:锁机制即提供了内存的可见性又提供了原子性)。
使用volatile标记的变量在读取或写入时不需要使用锁,这将减少产生死锁的概率。
原子操作:atomic
atomic是不会阻塞线程,线程安全的加强版的volatile原子操作。
以其中的AtomicInteger来说明:
AtomicInteger主要的方法有:
get() 获取当前值。
getAndSet(int newValue) 以原子方式设置为给定值,并返回旧值。
getAndDecrement() 以原子方式将当前值减 1。
getAndIncrement() 以原子方式将当前值加 1。
getAndAdd(int delta) 以原子方式将给定值与当前值相加。
public class AtomicIntegerDemo { public static void main(String[] args) { AtomicInteger atomicInteger=new AtomicInteger(); System.out.println(atomicInteger.get()); System.out.println(atomicInteger.getAndSet(1)); System.out.println(atomicInteger.getAndSet(2)); System.out.println(atomicInteger.getAndIncrement()); System.out.println(atomicInteger.getAndDecrement()); System.out.println(atomicInteger.getAndAdd(5)); System.out.println(atomicInteger.get()); }}
原子操作的实现原理
是利用CPU进行交换比较(即CAS:Compare and Swap)和非阻塞式算法(nonblocking algorithms);查看AtomicInteger源码会发现有些是通过调用JNI的代码实现的。JNI(Java Native Interface)为JAVA的本地调用,允许java调用其它语言,而Compare and Swap就是借助C来调用CPU底层指令实现的。
0 0
- Java关键字volatile修饰变量
- java中的Volatile关键字(成员变量修饰符)
- java修饰符:volatile关键字
- java 修饰符(transient volatile Synchronize 关键字)
- 浅谈Java修饰关键字 transient和volatile
- volatile修饰的变量
- Volatile修饰的变量
- volatile变量修饰符
- java 修饰符的作用三(transient volatile Synchronize 关键字)
- 类型修饰符volatile关键字
- java变量修饰符volatile的使用和性能
- Final关键字(修饰变量)
- const关键字修饰变量
- volatile修饰变量的用法。
- java的final关键字——修饰变量
- java的final关键字——修饰变量
- volatile关键字不具备synchronized关键字的原子性(同步),Atomic前缀修饰变量 具有原子性
- java中volatile关键字的含义 原子类型变量使用
- 商城系统中常见的逻辑陷阱和优化方案(1)
- web Deploy网站发布
- CC2530在IAR下printf重定向
- 作用域指针 boost::scoped_ptr
- HDU1113 POJ1318 UVA642 ZOJ1181 Word Amalgamation
- Java关键字volatile修饰变量
- [Win10]Docker安装时host-only cidr conflicts with the network address of a host interface错误解决
- Andrew NG 《machine learning》week 3,class2
- View的工作原理
- 网关的简单介绍
- 【Dongle】【牛腩新闻发布系统】TextBox边框显示
- eclipse如何创建web项目
- 1.Opencv API reference
- shiro 详解