Java原子性操作及应用

1 原子性

原子性:一个操作,或者多个操作,要么全部执行并且执行的过程中 不会被任何因素打断,要么就 都不执行

2 原子性操作

和原子性是一个意思,不需要 synchronized。指不会被线程调度机制打断的操作,这种操作,一旦开始,就一直运行到结束,中间不会有任何 context switch
原子操作可以是一个步骤,也可以是多个操作步骤,但其 顺序不可以被打乱,也 不可以被切割而只执行其中的一部分,将 整个操作视作一个整体 是原子性的核心特征

3 Java原子性操作的理解(赋值和自增自减)
3.1 赋值操作是否是原子性 — 不是
  • 不管是基础数据类型还是引用数据类型,都不是原子操作
  • 以结果论的话,局部变量基本数据类型的赋值操作,局部引用类型的 null赋值 是原子性的
  • 在 Java中,任何赋值操作都不是原子操作。它都具有先将被赋入的值加载到栈中,然后再赋值给变量
  • 像 int a = b ; 这种方式的赋值也不是原子操作,因为它需要 先加载 b变量的值到栈中,然后再赋值给a
3.2 自增自减操作是否是原子性 — 不是
  • 只有局部变量的 int类型,且 自增自减的幅度在 -32768 ~ 32767 时,局部变量的 int类型的 自增自减操作都是通过 iinc 或 iinc_w 一条指令完成的
  • 其他数据类型一定要有压栈,运算,存回的操作
    参考文章1参考文章2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章