Java并发编程—volatile


——————————————————————————

volatile的应用

volatile可以修饰变量
并发编程中有两种锁:

  • synchronized
  • volatile

volatile:

  • volatile是轻量级的 synchronized
  • volatile锁住的时候可以写,是只保证读是正确的

volatile在多处理器开发中保证了共享变量的“可见性” :

  • 可见性:当一个线程 修改一个共享变量时,另外一个线程能读到这个修改的值。
  • 因此能保证读到的值是正确的
  • 可见性一定是在多线程的情况下,一个线程对变量进行了修改,其他线程能立刻知道
  • 每个线程对变量进行操作的时候都会拷贝一个副本数据

线程不安全是因为t1,t2,t3操作变量s时都会拷贝一份s副本,彼此不知道,t1给s+1,t2给s+2,t1先更新数据,t2后更新数据,这时cpu的s=2,而不是正确的3,这样线程不安全,可见性是指t1对变量s进行操作之后,t2,t3等其他变量拷贝的s的数据就会失效,需要再读一次s的数据,这样读到的数据就是新修改的数据。

  • volatile修饰符使用恰当的话,比synchronized的使用和执行成本更低,因为volatile功能更少,它不会增加线程上下文的切换和调度,速度更快。
  • cpu分配时间片的时候
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值