面试官:CAS和AQS底层原理了解?我:一篇文章堵住你的嘴

本文深入探讨了CAS(Compare And Swap)的原理,包括其在并发编程中的应用,以及其优缺点。同时,文章分析了AQS(AbstractQueuedSynchronizer)的机制,介绍了AQS如何作为同步器框架,用于实现如ReentrantLock和CountDownLatch等并发工具类,并详细阐述了AQS中tryAcquire和tryRelease等方法的工作流程。

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

CAS(Compare And Swap)原理分析

字面意思是比较和交换,先看看下面场景(A 和 B 线程同时执行下面的代码):

int i = 10;  //代码 1
i = 20;      //代码 2

场景 1:A 线程执行代码 1 和代码 2,然后 B 线程执行代码 1 和代码 2,CAS 成功。

场景 2:A 线程执行代码 1,此时 B 线程执行代码 1 和代码 2,A 线程执行代码 2,CAS 不成功,为什么呢?

因为 A 线程执行代码 1 时候会旧值(i 的内存地址的值 10)保存起来,执行代码 2 的时候先判断 i 的最新值(可能被其他线程修改了)跟旧值比较,如果相等则把 i 赋值为 20,如果不是则 CAS 不成功。CAS 是一个原子性操作,要么成功要么失败,CAS 操作用得比较多的是 sun.misc 包的 Unsafe 类,而 Java 并发包大量使用 Unsafe 类的 CAS 操作,比如:AtomicInteger 整数原子类(本质是自旋锁 + CAS),CAS 不需加锁,提高代码运行效率。也是一种乐观锁方式,我们通常认为在大多数场景下不会出现竞争资源的情况,如果 CAS 操作失败,会不断重试直到成功。

CAS 优点:资源竞争不大的场景系统开销小。

CAS 缺点

  • 如果 CAS 长时间操作失败࿰
### 关于第九届全国GIS技能大赛上午的信息 #### 修改地图坐标系 为了使扫描图具有正确的坐标值和坐标系,需执行地理配准操作。具体而言,对于给定的地图图像文件(如`world_map.jpg`),应先确认其原始坐标系为WGS1984,并设定中央经线为东经150°。通过软件工具完成这一过程可以确保后续的空间数据分析准确性[^2]。 #### 地理配准流程 在ArcGIS或其他支持地理信息系统(GIS)功能的应用程序中,可以通过加载待校正的栅格影像(`topo_map.jpg`)并利用控制点匹配的方式实现精确配准。此过程中可能涉及到调整旋转角度和平移参数来最小化误差,从而获得实际地理位置相吻合的结果[^5]。 #### 数据处理可视化 一旦完成了上述步骤,则可以根据比赛要求进一步处理其他矢量或栅格数据集,比如叠加显示冰川边界、等高线以及河流网络等要素。这些图形元素有助于构建更全面的地貌特征描述,同时也便于评估地形变化趋势及其潜在影响因素。 #### DEM创建及三维建模 基于已有的高程信息建立数字高程模型(DEM),能够提供直观的高度分布视图,并为进一步生成立体景观奠定基础。这一步骤通常涉及插值算法的选择和优化,以保证输出质量满足竞赛评判标准的要求。 ```python import arcpy # 设置工作空间环境 arcpy.env.workspace = "D:/GIS_Contest/上午" # 定义输入输出路径变量 input_raster = "topo_map.jpg" output_gdb = "D:/GIS_Contest/上午/结果/result.gdb" output_dem_name = "TopoMap_DEM.tif" # 执行DEM转换命令 arcpy.RasterToOtherFormat_conversion(input_raster, output_gdb, "GRID") print(f"DEM 已成功保存至 {output_gdb}/{output_dem_name}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值