Java多线程的原子性、可见性、有序性

volatile关键字-java
    一个共享变量被volatile修饰后,就具备了两层语义
    1,保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的
    2,进制进行指令重排序
计算机在执行程序时,每条指令都是在cpu中执行,在执行过程中,涉及到数据的读取和写入,
    由于程序运行中的临时数据都是放在主存(物理内存)当中,这时就存在一个问题,由于CPU执行速度很快,
    因此CPU里面就有了高速缓存.
当程序在运行过程中,会将运算需要的数据从主存复制一份到cpu的高速缓存中,那么CPU进行计算时可以直接取和写,
    运算结束后,再将高速缓存中的数据刷新到主存中
在多线程当中,每条线程可能运行于不同的cpu,每个cpu都有不同的高速缓存,因此,就会出现缓存一致性问题

并发编程的三个概念
原子性:即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要不就都不执行
可见性:可见性是指多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值
有序性:即程序执行的顺序按照代码的先后顺序执行

也就是说,要想并发程序正确地执行,必须要保证原子性,可见性,以及有序性,只要有一个没被保证,就可能导致程序运行不正确

发布了38 篇原创文章 · 获赞 23 · 访问量 9063

猜你喜欢

转载自blog.csdn.net/qq_41806966/article/details/103393221