Java的多线程

volatie

1. 保证线程间变量的可见性

当变量在线程a中被修改后,其它线程工作内存中该变量的值可以立即得知改变(使得变量的修改被安全地同步到主内存中,同时使得其他线程的工作内存中对该变量的缓存失效;这样的话,其它线程必须重新去主内存中获取变量的最新值,即表现为对其它线程立即可见)

2. 禁止指令重排序

JVM指令重排序在单线程情况下不会出现问题(线程内表现串行的语义)。volatile关键字修饰的变量,生成字节码后会在变量前后生成内存屏障,指令重排时,不能把内存屏障后面的代码排到前面执行

3. 不能保证原子性

线程a读取了i=0的值,正在执行+1操作,稍后会回写到主内存;线程b已完成读取操作(不会再去主内存中取值),也在执行+1操作,等线程b执行完并回写到主内存后,i的值仍然是1。【原子操作需使用Atomic类】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值