开发者学堂课程【Java 高级编程:volatile 关键字】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/298
volatile 关键字
简介:在多线程的定义之中,volatile 关键字主要是在属性定义上使用的,表示此属性为直接数据操作,而不进行副本的拷贝处理。
在一些书上就将其错误的理解为同步属性。
1.在正常进行变量处理的时候往往会经历如下的几个步骤:
·获取变量原有的数据内容副本;
·利用副本为变量进行数学计算;
·将计算后的变量,保存到原始空间之中;
2.如果一个属性上追加了 volatile 关键字,表示的就是副使用副本而是直接操作原始变量,相当于节约了拷贝副本,重新保存的步骤。
package cn.mldn.demo;
class MyThread implements Runnable {
private int ticket = 5 ;
@Override
public void run() {
while(this.ticket〉0) {
try {
Thread.sleep(1
0
0);
}catch (InterruptedException e) {
e. printStackTrace();
System.out.printIn(Thread. current Thread().getName() + "
卖
票
处
理,ticket = " + this.ticket
--)
public class ThreadDemo {
pub1ic static void main(String[] args) throws Exception {
MyThread mt = new MyThread( ) ;
new Thread(mt,"票
贩
子A").start();
new Thread(mt,"票
贩
子B").start();
new Thread(mt,"票
贩
子C").start();
3.解释 volatile 与 synchronized 的区别:
volatile 无法描述同步的处理,它只是一种直接内存的处理,避免了副本的操作,而 synchronized 是实现同步的;