volatile与syschronized的区别

   在Java中的syschronized是线程同步的关键字,在Java类中的方法和变量或者类中使用了该关键字的时候,相当于给他们上了把锁。

在进行功能运行的时候,一个线程中只能访问该上了锁后的方法或者变量和类,其他线程不能访问当前线程上了锁的方法或者变量和类,
使用该关键字的时候容易造成线程阻塞的状态,使其他线程只能等待该上了锁的线程执行完毕后才开始执行。在其他地方调用
该关键字的时候只能进行读取的操作,而不能进行写入的操作。(syschronized关键字的优点:可以被编译器优化,缺点:使用了该关键字的变量会造成线程阻塞的问题)。

而volatile关键字恰恰与它相反,使用了该关键字的变量它会自动告诉工作内存中的值是不确定的。使用的时候需要从主存中读取,该关键字只能使用在声明的变量上,而不能使用到其他的地方。在其他地方调用该变量的时候可以进行读写的操作,它相对于syschronized关键字的最大区别在于它不会造成线程的阻塞,但是被标记的变量不会被编译器优化。
volatile关键字的使用在这插入图片描述
到这里,我们可以理解成为:syschronized关键字是一把重量级的锁,而volatile关键字是一把轻量级的锁。重量级的锁的使用应该要谨慎,不注意很可能造成线程阻塞的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值