Java中的并发:线程安全性
文章目录
一.什么是线程安全性?
1.什么是线程安全类?
当多个线程访问某个类时,不管运行时环境采用何种调度方式,或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,则这个类是线程安全的。
2.无状态对象一定是线程安全的
什么是无状态对象?
有一种类,它不包含任何域,也不含任何对其他类中域的引用,且执行过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问,这样的类创建的对象就叫无状态对象。
2.竟态条件:就是正确的结果要取决于运气
3.复合操作:我们将先检查再执行,以及 读取-修改-写入等无法一步完成的操作统称为复合操作。
二.线程安全性具体体现在哪儿?(原子性,可见性,有序性)
1.原子性:提供互斥访问,同一时刻只能有一个线程对它进行操作。
java中如何体现原子性的:
Atomic包中的类主要通过CAS实现原子性
CAS的含义是:CompareAndSwap 原理是:
public final int getAndAddInt(Object var1(当前对象),long var2(var1值的偏移量),int var4(对象值要加的值)){
int var5;
do{
var5=this.getIntVolatile(var1,var2);//获得主存中此对象的值
}while(!this.CompareAndSwapInt(var1,var2