并发三特性(线程安全三特性)

为什么会提出这三个特性呢,就是说,如果某段代码不满足 原子性/可见性/有序性 那么就可能产生并发安全问题。

原子性(我的理解):对于代码段,一次只允许一个线程执行
可见性:变量被修改后,对其他线程立马可见
有序性:代码禁止重排序

违反原子性举例:

首先我们保证可见性和有序性

i++;

多个线程同时执行上述操作

违反可见性举例:
if(i<0){
   i++;
}

首先我们包证有序性和这块代码的原子性,即一次只允许一个线程执行。
初始时,i=-1,线程A执行代码块,结果i变成0了,紧接着线程B执行代码块,在判断时没有看到线程A对变量i的更新,进入if逻辑,再次读取i,看到了线程A对i的更新,B执行后i变成了1。最好i变成了1,是有问题的。

违反有序性举例

有了原子性和可见性,保障代码线程安全好像够用了。想象我们是jvm的设计者,如果提供解决代码重排问题的工具,被原子性保障的代码块是会出现问题的。比如说代码块A是被原子性保障的,但是代码块A里面的代码可能和外部的代码重排序,结果就是跳出了原来的代码块,那么原来的代码块也就不再满足原子性了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值