java volatile和atomic包的区别
2015-08-03 22:15
453 查看
首先volatile是java中关键字用于修饰变量,AtomicReference是并发包java.util.concurrent.atomic下的类。
首先volatile作用,当一个变量被定义为volatile之后,看做“程度较轻的 synchronized”,具备两个特性:
1.保证此变量对所有线程的可见性(当一条线程修改这个变量值时,新值其他线程立即得知)
2.禁止指令重新排序
注意volatile修饰变量不能保证在并发条件下是线程安全的,因为java里面的运算并非原子操作。
volatile说明
java.util.concurrent.atomic工具包,支持在单个变量上解除锁的线程安全编程。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。
AtomicReference说明
继续深入理解,需要理解关于可见性,重排序,cas非阻塞算法的理论‘
首先volatile作用,当一个变量被定义为volatile之后,看做“程度较轻的 synchronized”,具备两个特性:
1.保证此变量对所有线程的可见性(当一条线程修改这个变量值时,新值其他线程立即得知)
2.禁止指令重新排序
注意volatile修饰变量不能保证在并发条件下是线程安全的,因为java里面的运算并非原子操作。
volatile说明
java.util.concurrent.atomic工具包,支持在单个变量上解除锁的线程安全编程。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。
AtomicReference说明
继续深入理解,需要理解关于可见性,重排序,cas非阻塞算法的理论‘
相关文章推荐
- java 各种规范的地址 包括 java se 与java ee
- java socket编程实例代码讲解
- MAVEN下实现spring boot打包成war包(spring boot 01)
- 关于java ee 7 精粹
- java线程池原理
- java设计模式(二)
- 使用eclipse tool 逆向生成Hiberante类xml、和hbm.xml
- java 类加载机制
- Java进阶(五十一)必须记住的Myeclipse快捷键
- 必须记住的Myeclipse快捷键
- java IO总结
- JAVA 语言基础总结
- Java删除ArrayList中的重复元素的2种方法
- java基础第八讲——URL、XML的解析
- Java Timer 定时器的使用
- Java异常处理——浅谈
- 一句话解释什么是回调函数
- Java学习--(五)Buliding a Java Program(使用eclipse)
- Java并发编程:volatile关键字解析
- Java 反射机制原理