并发编程3大基本特性(有序性、可见性、原子性)

本文详细阐述了并发编程中的三个基本特性——有序性、可见性和原子性,以及它们为何重要。此外,讨论了JVM对指令的重排序、内存屏障在保证并发安全中的作用,以及并发编程的高级概念如一致性、隔离性和死锁等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、并发编程的基本特性有3点(这3点需人为来保障)

1.有序性:保证程序中的指令按照代码顺序执行,不会发生重排序,除非在不影响程序执行结果的情况下。

2.可见性:确保当一个线程修改了共享变量的值,其他线程能够立即看到这个变化。

3.原子性:保证复合操作(如自增、读写等)在执行过程中不会被中断,即这些操作要么完全执行,要么完全不执行。

这意味着想做到多线程并发安全,就要实现这3个基本特性。像 java 的 volatile、synchronized、Lock 等技术的目的就是在实现这3个基本特性。

二、思考

有序性(算力层优化导致的无序)

1、跟有序性相对的是无序性,那为什么并发程序是无序性的?
有序性通常指的是程序指令的执行顺序。为了提高性能,jvm在单线程安全前提下 可能会对指令进行重排序,这在一定程度上引入了无序性。然而,这种无序性可能就会对多线程程序的正确性产生影响

2、为什么jvm要对指令进行重排序?
jvm进行指令重排序,可以减少执行指令的数量,或者将相关操作放在一起执行。这样可以减少不必要的数据读取和处理时间,从而提高程序的整体运行速度。

3、jvm的指令重排序,如何能够减少执行指令的数量?
a. 编译器优化:编译器在编译过程中会进行一定程度的重排,例如将读取同一数据的操作放置在一起执行,以减少数据读取的时间开销和提高效率。这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值