并发线程的三个重要概念

并发线程的三个重要概念

1 原子性

对基本数据类型的变量读取和赋值是保证了原子性的,要么都成功,要么都失败,这些操作不可中断。

比如 i = 10

a = 10 原子性
b=a 不满足 read a , 赋值 b
c++ 不满足 read c ; add , 赋值 c
c=c+1 不满足 read c;add; 赋值 c

2 可见性

	可以使用volatile 关键字保证可见性

	什么是可见性,两个线程分别从主内存中获取数据,缓存到自己缓存区中,一个线程对数据进行改变了,另一个线程立马可以感应到,这叫做可见性,可以使用volatile 关键字进行修饰所操作的数据。

3 有序性

	happens-before relationship 原则

1 代码的执行顺序,编写的前的发生在编写后面的
2 unlock 必须发生在lock后
3 volatile 修饰的变量,对一个变量的写操作先于读操作
3 传递规则,操作A先于B,B先于C,那么A肯定先于C
4 线程启动规则,start先于run
5 线程中断规则,interrupt 这个动作,必须发生在捕获该动作之前。
6 对象销毁规则,初始化发生在finalize之前
7 线程中介规则,所有的操作都发生在线程死亡之前

Volatile 关键字

1 保证重排序的是不会把指令放到屏障的前面,也不会把前面的放在后面。

2 强制对缓存的修改操作立刻写入主内存。

3 如果是写操作,它会导致其他Cpu中的缓存失效。

一旦一个贡献变量被volatile修饰,具备两层含义

1 保证了不同线程间的可见性
2 禁止对其进行重排序,也就是保证了有序性
3 并未保证原子性

发布了241 篇原创文章 · 获赞 66 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_38361347/article/details/104641107