volatile结合多线程抢票讲解

本文通过分析多线程环境下,volatile关键字如何确保数据一致性。在没有volatile的情况下,多线程可能造成数据不一致,而volatile可以避免变量副本导致的问题,但仍然存在并发修改的同步问题。通过实例展示了抢票场景,强调在并发控制中使用volatile的重要性。
摘要由CSDN通过智能技术生成

img
变量在进行引用时,原本需要从保存在内存中的内容进行拷贝,引用完或修改完后再重新赋值回原本的变量
但是这样会导致在有些时候,多线程条件下, 出现在未返回修改后的结果到原本的变量中,则对原始的变量进行引用,
则会出现数据的不一致性。
volatile 只能保证变量在进行引用时,直接引用原本的变量,不经过副本拷贝的操作。这样就数据的一致性,
但是在多线程条件下,单纯的保证数据的一致性还不够,因为多个线程会在同一时刻对同一个变量引用进行多次的获取,
如果对该变量进行修改操作,则会导致数据不同步。
A 抢了第 99 张票! // A C线程在同一时刻对同一个变量引用进行多次的获取
C 抢了第 99 张票! // 但是volatile会直接将这个变量的修改进行直接修改,
B 抢了第 101 张票! // 所以多线程修改该变量后,会得到两次相加后的结果,
// 但是因为不加volatile, 拷贝副本的速度也很快,导致效果和加了volatile差不多
// 但是只怕万一会出现极端情况,所以加volatile是万无一失的做法

package com.jun.music;

public class VolatileTest {
   

    public static void main(String[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值