`
tom_seed
  • 浏览: 321710 次
  • 性别: 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

分享到:
评论

相关推荐

    cas 单点登录 解决方案.

    cas 单点登录解决方案 cas 单点登录解决方案是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。随着企业的发展,业务系统的数量...

    struts2+cas单点登陆例子

    总结一下,Struts2+CAS的单点登录集成涉及到的主要知识点包括:CAS的工作流程、Struts2框架的拦截器机制、Web应用的过滤器配置以及安全认证的实现。通过这个简单的示例,开发者可以学习如何在自己的项目中实施SSO,...

    CAS单点登录实例

    本文将深入探讨CAS单点登录实例及其相关知识点。 首先,单点登录(Single Sign-On,SSO)是一种身份验证机制,使得用户在一个应用系统中登录后,无需再次输入认证信息即可访问其他关联的应用系统。CAS作为开源的SSO...

    cas单点登录

    CAS(Central Authentication Service)是 Yale 大学开源的一个单点登录协议,它提供了一种集中式的认证方式,简化了多应用系统的身份验证流程。 **单点登录原理** 单点登录的核心在于一个中心认证服务器(CAS ...

    CAS单点登录demo

    CAS(Central Authentication Service)单点登录系统是一种网络身份验证协议,它允许用户通过单一的身份验证过程访问多个应用系统。在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现...

    .net cas单点登录

    .NET CAS(Central Authentication Service,中央认证服务)是Java平台上的一个开源身份验证框架,但同样可以与.NET环境集成,实现跨域的...理解和实施这些知识点,可以帮助开发者构建安全且用户友好的多应用系统环境。

    CAS单点登录配置

    CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On, SSO)系统,它允许用户通过...记住,实践是检验真理的唯一标准,理论知识结合实际操作才能更好地掌握CAS的配置。

    cas单点登出的3个类

    标题中的“cas单点登出的3个类”指的是在CAS(Central Authentication Service)系统中实现单点登出功能所涉及的关键组件。CAS是一个开源的身份验证框架,它提供了单点登录(Single Sign-On, SSO)功能,允许用户...

    CAS单点登录(java)

    CAS单点登录CAS单点登录CAS单点登录CAS单点登录

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    CAS单点登录操作文档

    CAS单点登录操作文档 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: • 开源的企业级单点登录解决...

    基于Java集成CAS单点登录【接部署即可启用】

    基于Java中CAS的单点登录,有服务端的所有源码,将tomcat目录下的所有资源直接拷到Tomcat服务中间件的webapp目录下,阅读tomcat-webapp中的read.txt文档,查看使用说明,适用于第一次开发CAS单点登录的同学们,简单...

    CAS单点登录配置大全

    **CAS单点登录配置大全** CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On,SSO)协议。它允许用户通过一个统一的认证系统访问多个应用系统,而无需在每个系统...

    cas单点登录需要的jar包

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)系统。它允许用户通过一个认证入口访问多个应用系统...对于Java Web开发者来说,熟悉这些知识点是至关重要的。

    CAS单点登录多语言整合文档+源码

    这个压缩包文件包含的是关于CAS单点登录的多语言整合文档和源码,特别提到了PHP客户端和Java客户端的整合。 首先,我们来深入理解一下CAS的基本工作原理。当用户尝试访问受CAS保护的应用时,会被重定向到CAS服务器...

    集成cas实现单点登录认证.zip

    下面我们将详细探讨相关的知识点。 1. CAS简介:CAS是耶鲁大学开源的一个Web应用的集中式身份验证服务,其目标是简化Web应用的安全管理,减少用户的登录步骤,提高安全性。CAS支持多种协议,如CAS协议、SAML2.0等,...

    禅道开源版集成CAS单点登录

    本文在已有的禅道集成CAS单点登录的客户端插件基础上进行的修改,因原有插件在我们的系统上调试无法成功,做了一些定制,环境如下: 1. CAS server 版本:4.0.0 2. 禅道开源版本: 9.6.3 3. 禅道CAS client 插件版本...

    CAS单点登录Demo

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,SSO)框架,主要用于解决多个应用系统间的身份认证问题。在本文中,我们将深入探讨CAS单点登录的基本原理、工作流程以及...

    CAS单点登录时序图.puml

    CAS单点登录时序图,UML源码

Global site tag (gtag.js) - Google Analytics