若有收获,请记得分享和转发哦
“三妹啊,既然放假了,我们就一起来深入学习一下 Java 并发编程吧。”
“并发编程太难了,想想都头大。”三妹很不情愿地说。
“没关系,我们一步步来。”我说,“今天我们先来学习一下Java 并发编程的基础知识,包括原子性、可见性、有序性,以及内存模型 JMM。”
并发编程基本概念
原子性
一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
原子性是拒绝多线程操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。
例如 a=1 是原子性操作,但是 a++和 a +=1 就不是原子性操作。Java 中的原子性操作包括:
基本类型的读取和赋值操作,且赋值必须是值赋给变量,变量之间的相互赋值不是原子性操作;
所有引用 reference 的赋值操作;
java.concurrent.Atomic.* 包中所有类的一切操作。
可见性
指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
在多线程环境下,一个线程对共享变量的操作对其他线程是不可见的。