SummerXinBing / xiabing_wuji

学习仓库,用此来驱动自己
Apache License 2.0
0 stars 0 forks source link

JUC 并发基础 #15

Open SummerXinBing opened 6 months ago

SummerXinBing commented 5 months ago

JUC 并发基础

JAVA怎么解决并发的? 并发三要素: 可见性 有序性 原子性 重排序会被影响多线程,重排序有编译器优化的重排序、指定级重排序、内存系统重排序

JAVA内存模型 每个线程都有自己的共享内存;并且JVM提供一个主存; 禁止指令重排序 发生-之前 原则

JAVA并发关键字 volatile、synchronized 和 final volatile保证可见性:volatile修饰的变量,在做了更新操作后,会立即更新到主存中;

SummerXinBing commented 5 months ago

volatile如何实现有序性和可见性 可见性:当有多个线程操作volatile修饰的变量时,某一个线程修改了本地内存的变量后,会被立即刷新到主存中;如果其他线程需要操作其变量,会先将主存的值复制到另一个线程的本地内存中,再做修改; 有序性:当有多个线程操作volatile修饰的变量时,整个操作是禁止指令重排序的(内存屏障),保证了有序性;

指令重排序:

happed-before原则?

SummerXinBing commented 5 months ago

happeds-before原则 A happeds-before B ,就是A的执行结果对B可见,并且A优先于B发生; 这也是volatile保证有序性的核心;