阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第5章:多线程深入话题:课时22:volatile关键字

在多线程的定义之中,volatile关键字主要是在属性定义上使用的,表示此属性为直接数据操作,而不进行副本的拷贝处理。这样的话在一些书上就将其错误的理解为同步属性了。
在这里插入图片描述
在正常进行变量处理的时候往往会经历如下的几个步骤:
1.获取变量原有的数据内容副本;
2.利用副本为变量进行数学计算;
3.将计算后的变量,保存到原始空间之中;
而如果一个属性上追加了volatile关键字,表示的就是不使用副本,而是直接操作原始变量,相当于节约了:拷贝副本、重新保存的步骤。

package cn.mldn.demo;

class MyThread implements Runnable {
	private volatile int ticket = 5 ; // 直接内存操作
	@Override
	public void run() {
		synchronized (this) {
			while (this.ticket > 0) {
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName() + "卖票处理,ticket = " + this.ticket --);	
			}
		}
	}
}
public class ThreadDemo {
	public 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();
	}
}

面试题:请解释volatile 与 synchronized 的区别?
volatile 主要在属性上使用,而synchronized 是在代码块与方法上使用的;
volatile 无法描述同步的处理,它只是一种直接内存的处理,避免了副本的操作,而synchronized 是实现同步的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值