12-原子性

nobility 发布于 2021-05-17 2521 次阅读


原子性

原子性:一系列操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分隔的

比如i++操作其实就是:取出i的值,加1,赋回来i的值,这是三步操作,不是原子性的,可使用synchronized实现原子行

原子性操作

  • 除long和double之外的基本类型赋值操作都是原子操作
  • 所有引用类型的赋值操作都是原子操作,无论是32位还是64位机器
  • java.concurrent.Atomic.*包中的所有类都是原子类

long和double的原子性

由于long和double是64位的值,所以在32位机器上会被视为两次单独的写入,每次写32位;64为位的JVM上是原子的

  • Oracle官方鼓励JVM在实现时,避免拆分64位值
  • Oracle官方鼓励程序员将其使用volatile修饰或进行同步,以防止JVM在实现时为实现上述内容

原子操作的组合

以下操作并不能一定保证线程安全

synchronized (this){
  //...
}
synchronized (this){
  //...
}

需要再套一个,来保证线程安全

synchronized (this){
  synchronized (this){
    //...
  }
  synchronized (this){
    //...
  }
}
此作者没有提供个人介绍
最后更新于 2021-05-17