Loading

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
posted @ 2020-10-11 10:45  文牧之  阅读(5)  评论(0)    收藏  举报  来源