`
tom_seed
  • 浏览: 323983 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CAS知识点收录

 
阅读更多

线程阻塞非阻塞及原子量碰撞http://my.oschina.net/bairrfhoinn/blog/167071

 

CAS:Compare and Swap, 翻译成比较并交换

  • java.util.concurrent包完全建立在CAS之上的
  • java.util.concurrent包中借助CAS实现了区别于synchronized同步锁的一种乐观锁
  • Java中CAS主要由sun.misc.Unsafe实现,提供了硬件级别的原子操作
  • Java无法直接访问到操作系统底层(如系统硬件等),因此Java使用native方法来扩展Java程序的功能,具体实现使用c++

Unsafe中关于CAS比较常用的方法:boolean sun.misc.Unsafe.compareAndSwapXXX(Object arg0, long arg1, int arg2, int arg3);

有4个操作数,1.内存值;2.属性偏移量;3.旧的预期值;4.要修改的新值。当且仅当旧的预期值和内存值相同时,将内存值修改为新值,否则什么都不做。

注:compareAndSwapXXX是根据字段偏移量去修改对象的值,其中int是4个字节的偏移量,long是4个字节的偏移量,String是4个字节的偏移量。偏移量与硬件机器有关。

 

Unsafe对象获取:Unsafe的对象不能直接new,要通过反射去获取。以下是获取方法:

private static Unsafe getUnsafeInstance() throws Exception {
	Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
	theUnsafeInstance.setAccessible(true);
	return (Unsafe) theUnsafeInstance.get(Unsafe.class);
}

参考资料:http://www.importnew.com/7844.html

 

以简单的AtomicInteger为例:

public class AtomicInteger extends Number implements java.io.Serializable {
    //...上略
    private static final Unsafe unsafe = Unsafe.getUnsafe();

    private volatile int value;

    public AtomicInteger(int initialValue) {
        value = initialValue;
    }

    public AtomicInteger() {}

    public final int get() {
        return value;
    }

    public final void set(int newValue) {
        value = newValue;
    }

    public final int getAndSet(int newValue) {
        for (;;) {
            int current = get();
            if (compareAndSet(current, newValue))
                return current;
        }
    }

    public final boolean compareAndSet(int expect, int update) {
	return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

    //...下略
}
  • 使用volatile原语,保证线程间的数据是可见的(共享的)
  • unsafe.compareAndSwapInt利用JNI来完成CPU指令的操作,同时借助JNI来完成Java的非阻塞算法(一个线程的失败或者挂起不应该影响其他线程的失败或挂起的算法)

参考资料:http://www.blogjava.net/xylz/archive/2010/07/04/325206.html

 

其他资料:

用AtomicStampedReference解决ABA问题:http://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.html

并发-原子操作的实现原理(CPU层面上的说明):http://www.searchsoa.com.cn/showcontent_69238.htm

分享到:
评论

相关推荐

    Complexity

    ### 关键知识点 #### 复杂性的定义与特征 复杂性科学关注的是那些由多个组成部分构成的系统,这些组成部分之间存在着动态的、非线性的相互作用。这种相互作用导致系统行为的不可预测性和涌现现象,即整体表现出的...

    计算机专业英语词汇大全

    下面是从给定的文件中生成的知识点: 1. AGP(Accelerated Graphics Port):图形加速接口 AGP是一种图形加速接口,能够提高计算机的图形处理能力。 2. Access Time(存取时间):指计算机从存储器中读取数据所需...

    项目IP和本地IP(及WiFi)一键切换

    项目IP和本地IP(及WiFi)一键切换

    The Little Book Of Delphi Programming Learn To Program with Object Pascal

    也是一本delphi初学者所用的书

    VP9.0远程白屏问题解决方案

    VP9.0远程白屏问题解决方案

    大厂高频源码注入实战:深入剖析Spring、React与Dubbo的源码级定制技巧

    内容概要:本文详细介绍了大型互联网公司在日常开发中对各种主流框架进行源码级注入的实际案例和技术细节。首先探讨了Spring框架中通过BeanPostProcessor接口实现的属性注入,展示了如何在Bean初始化阶段动态修改限流阈值。接着讨论了React框架中利用未公开的内部属性进行调度策略的自定义注入,以及Dubbo框架中通过修改ProtocolFilterWrapper类实现自定义风控过滤器的添加。此外,还提到了MyBatis插件机制用于SQL执行链路的埋点监控,以及JVM启动参数配合ClassFileTransformer实现的字节码增强技术。最后,文章强调了源码级注入带来的灵活性和潜在风险,如兼容性和调试难度等问题。 适合人群:具备一定编程经验的技术人员,尤其是对框架底层运作感兴趣的开发者。 使用场景及目标:帮助读者理解并掌握如何通过对现有框架进行深层次定制来满足特定业务需求,同时提醒读者注意此类操作的风险和挑战。 其他说明:文中提供了多个具体的代码片段作为示例,便于读者更好地理解和应用相关技术。

    麒麟操作系统桌面运维KYCP题库.doc

    麒麟操作系统桌面运维KYCP题库 稳过

    程序设计语言基础JAVAWEB_Java期末试卷及答题卡(2005-2006第二学期) (2).doc

    程序设计语言基础JAVAWEB_Java期末试卷及答题卡(2005-2006第二学期) (2)

    计算机视觉中的智能系统与应用

    本书全面介绍了计算机视觉领域的智能系统和应用,包括机器学习、深度学习算法、元启发式算法在图像处理中的应用。书中详细讨论了图像分割、模式识别、对象检测等优化问题,并提出了新颖的解决方案,如多分辨率分析和元启发式算法。此外,书中还涵盖了图像水印、隐写术、形态处理等重要主题,并提供了一系列用于图像处理和分割的平台和仿真工具。本书不仅为读者提供了计算智能的基础知识,还介绍了图像处理和计算机视觉领域的最新技术进展,包括数字图像的智能应用和相关使能技术。对于电气工程、电子学、通信工程和计算机工程等领域的高年级本科生、研究生和学术研究人员来说,本书是一本理想的参考文献。

    C#与VP9.0构建的VisionPro视觉通用检测框架源码详解及其应用场景

    内容概要:本文详细介绍了基于C#和VP9.0的VisionPro视觉通用检测框架源码。该框架涵盖多个关键方面,如视觉处理、数据处理、文件操作和IO卡应用。视觉处理模块展示了如何使用VisionPro工具库进行图像预处理,如灰度化、滤波等;数据处理模块涉及对视觉处理后数据的分析,如计算物体尺寸;文件操作模块实现了检测结果的持久化存储;IO卡应用模块使框架可以与外部硬件设备交互。此外,文中还探讨了框架的高级特性,如异常恢复机制、插件系统和多相机协作处理等。 适合人群:对视觉检测技术感兴趣的开发者,尤其是有一定C#编程基础和技术背景的人群。 使用场景及目标:适用于需要深入了解视觉检测技术和快速搭建实际项目框架的开发者。目标是帮助开发者掌握VisionPro框架的核心功能和设计理念,以便更好地应用于工业检测和其他相关领域。 其他说明:该框架不仅提供了详细的代码示例,还分享了许多实践经验,如内存管理和硬件适配技巧。同时,强调了框架的稳定性和灵活性,使其成为工业级视觉检测解决方案的理想选择。

    工业物联网技术与应用

    本书《Industrial Internet of Things Technologies, Design, and Applications》由Sudan Jha、Usman Tariq等人编辑,涵盖了工业物联网(IIoT)的广泛主题。书中不仅介绍了IIoT的基础知识,还包括了在智能设备、智能穿戴设备、联网汽车以及智能医疗设备等领域的应用。IIoT的核心在于利用网络物理系统监控工厂物理过程,并基于数据做出自动化决策。本书还探讨了IIoT领域中与安全相关的议题和解决方案,并为有志于该领域研究的人员提供了新的研究方向。

    C# WinForm ERP框架:高效ORM、灵活UI与模块化架构的最佳实践

    内容概要:本文介绍了一款适用于多领域的C# ERP框架,主要特点包括高效的ORM实现、丰富的UI皮肤切换功能以及强大的模块化架构设计。框架利用表达式树实现了高性能的动态查询,相比传统反射速度快3倍以上。同时,它集成了DevExpress 16.2控件库,提供了多种UI风格选择,并针对不同应用场景进行了优化。此外,框架采用了MEF插件系统和Actor模型来处理高并发任务,确保系统的灵活性和扩展性。数据库设计方面引入了字段版本控制表,满足严格的审计要求。安全性方面,框架实现了动态盐值加密码保护机制。 适合人群:熟悉C#开发,尤其是WinForm桌面应用程序开发者和技术主管。 使用场景及目标:① 快速搭建跨行业的ERP系统;② 提升WinForm应用的用户体验和性能;③ 实现复杂业务逻辑的模块化开发;④ 满足特定行业如医疗、制造等领域的需求。 其他说明:尽管文档较为简略,但通过深入研究源代码可以挖掘更多高级特性。

    基于ssm+mysql的私人书店管理系统(含LW+PPT+源码+系统演示视频+安装说明).zip

    系统名称:JSP私人书店管理系统 技术栈:JSP技术、MySQL数据库、eclipse工具 系统功能:管理员功能:管理员注册与登录、图书信息管理(包括对外借阅、对外销售的图书,出库、入库等信息管理)、借阅图书和销售图书的信息统计、图书配送安排、用户账户管理(包括会员用户购书订单、注册信息、借阅信息和购买图书信息等)。用户功能:主页浏览、会员用户注册与登录、图书选购(包括查看图书简介、价格等)、图书订购(包括扫码付款和自助退款)、图书借阅、个人后台查询(包括购买图书历史、借阅图书历史和购买图书数量统计等)。 摘要:电子商务在近些年来已经成为了我国重要的第三产业之一,电子商务成为了我国经济增速中一个不可缺少的组成部分,而随着互联网技术的不断发展,现在的电子商务也已经日趋成熟,不仅仅是在技术层面实现了线上商品展示、线上咨询以及线上支付等功能,更是通过战略发展的角度进一步的完善了该行业的发展空间,使得其能够长期处于健康发展的状态。互联网的思维模式下,虚拟网络带给人们全新的生活体验,而电子商务的出现更是极大的方便了人们的日常生活,带动着全球化的深度改革。而随着网络化的不断发展,当下任何商品、服务都可以通过网络来实现销售,图书作为最为传统的一项商品也能够实现在网络的销售、借阅管理等功能。利用计算机手段可以从功能和技术两个方面按照图书销售的要求来开发必须的功能模块。

    苏苏源码-jspm031-网上宠物店.zip

    苏苏源码-jspm031-网上宠物店

    weixin272基于微信小程序的医院体检管理系统+ssm(文档+源码)_kaic

    weixin272基于微信小程序的医院体检管理系统+ssm(文档+源码)_kaic

    未来方向之空天地一体化系统综述

    未来方向之空天地一体化系统综述

    WPS专业PO解版本,如有需要可以下载使用

    WPS专业PO解版本,如有需要可以下载使用

    DCDC电路设计-boost电路-MT3608电路设计工程,包含原理图和PCB文件,嘉立创EDA格式和Altium工程.rar

    DCDC电路设计-boost电路-MT3608电路设计工程,包含原理图和PCB文件,嘉立创EDA格式和Altium工程.rar

    ESTARFM_3Pairs.js

    影像融合的的算法

    基于ssm+mysql的强国有我党建网站(含LW+PPT+源码+系统演示视频+安装说明).zip

    基于ssm+mysql的强国有我党建网站(含LW+PPT+源码+系统演示视频+安装说明)

Global site tag (gtag.js) - Google Analytics