并发编程3大基本特性
一、并发编程的基本特性有3点(这3点需人为来保障)
1.有序性:保证程序中的指令按照代码顺序执行,不会发生重排序,除非在不影响程序执行结果的情况下。
2.可见性:确保当一个线程修改了共享变量的值,其他线程能够立即看到这个变化。
3.原子性:保证复合操作(如自增、读写等)在执行过程中不会被中断,即这些操作要么完全执行,要么完全不执行。
这意味着想做到多线程并发安全,就要实现这3个基本特性。像 java 的 volatile、synchronized、Lock 等技术的目的就是在实现这3个基本特性。
二、思考
有序性(算力层优化导致的无序)
1、跟有序性相对的是无序性,那为什么并发程序是无序性的?
有序性通常指的是程序指令的执行顺序。为了提高性能,jvm在单线程安全前提下 可能会对指令进行重排序,这在一定程度上引入了无序性。然而,这种无序性可能就会对多线程程序的正确性产生影响
2、为什么jvm要对指令进行重排序?
jvm进行指令重排序,可以减少执行指令的数量,或者将相关操作放在一起执行。这样可以减少不必要的数据读取和处理时间,从而提高程序的整体运行速度。
3、jvm的指令重排序,如何能够减少执行指令的数量?
a. 编译器优化:编译器在编译过程中会进行一定程度的重排,例如将读取同一数据的操作放置在一起执行,以减少数据读取的时间开销和提高效率。这