java并发问题的三要素

线程相关的笔记

java并发问题的三要素

可见性
//线程1执行的代码
int i= 0;
i=10;
//线程2执行的代码
j=i;

当线程1执行i赋值操作时是先在内存中,然后才会写入主存,此时,线程2会在主存中读取i的值,但线程1没有写到主存,所以读取到的值是i=0,这就是可见性问题。

原子性

就是一组操作,要么全部执行,要么全部都不执行。

int i= 0;
//线程1
i+=1;
//线程2
i+=1;

i+=1,执行顺序是,把变量i从内存读取到cpu寄存器进行运算,cpu执行i+1操作,将结果写入内存。由于cpu线程切换的操作,线程2在线程1执行第一步就抢占资源先执行了,然后就回到线程1执行后续步骤,就会导致写入内存的是2。

有序性:指令重排

就是在程序运行的时候,并没有按照人为安排的顺序来执行,为了提高性能,内部进行了指令重排的操作,像有编译器优化的重排序、指令级并行的重排序,内存系统的重排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值