转载地址:http://www.jdon.com/46072
一般认为原子类型(java.util.concurrent.atomic类)能充分发挥代码的快速和高并发特点,大部分时间atomic确实发挥了更大作用,不过也有一些场景其实隐藏了非管理竞争的消耗,以至于成为一个严重的性能问题。
首先让我们来看看Atomic是如何实现的?所有的原子类型如AtomicLong, AtomicBoolean , AtomicReference等,基本上都是包装的volatile挥发性的值,这个新增的值来自于内部为这些类型提供CAS功能的sun.misc.Unsafe。
CAS(compare-and-swap)比较并交换)本质上是现代硬件上的实现,允许无堵塞 多线程数据处理能以一种安全有效方式实现,CAS发挥的巨大优势是:CAS不会招致内核级别的任何开销,编译器发出CPU指令,如lock cmpxchg, lock xadd, lock addq,这可以像你从JVM中调用指令一样快,CAS提供了比锁更好的一种替代。
但是使用在某些场合CAS会导致开销增大,可以见Dave Dice等人的研究成果,Java程序员应该好好读一下这个报告,避免了很多关于CAS的误解。
下面是一个实现back-off竞争管理的代码,非常简单,替代了之前失败的CAS,取而代之的是先退避一点时间,然后让其他线程来修改:
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.LockSupport;
public class BackOffAtomicLong {
public static long bk;
private final AtomicLong value = new AtomicLong(0L);
public long get() {
return value.get();
}
public long incrementAndGet() {
for (;;) {
long current = get();
long next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
public boolean compareAndSet(final long current, final long next) {
if (value.compareAndSet(current, next)) {
return true;
} else {
LockSupport.parkNanos(1L);
return false;
}
}
public void set(final long l) {
value.set(l);
}
}
测试结果如下,测试条件是: 64-bit Linux 3.5.0 (x86_64) with Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz (8 logical cores) using 64-bit Hotspot Java 1.7.0_25-b15.
在多个读,一个写的场景下,back-off和CAS没有什么区别,但是在一个读多个写以及多个读多个写的情况却不同, BackOffAtomicLong 比Atomic有很大的性能提升
相关推荐
内含本人实例精华,一个自做PPT,动画解析cas协议,四...3.1.6 深入配制CAS服务器 7 3.1.7 配制CAS客户端 8 3.1.8 用到的jar包 8 3.1.9 CAS深入研究 8 4 开发环境的配置 8 5 运行环境的配置 9 6 结束语 9 7 参考文献 9
目录: 第2016期:云计算软件维护经验分享 第2017期:H3C CVM新双机热备介绍 第2018期:存储基础和FC SAN存储介绍 第2020期:iSCSI存储和存储多路径介绍 第2023期:CAS虚拟化基础...第2027期:CAS CVM管理平台详解
资源列表(1:cas CAS Server,2:Cas_Client_One 授权系统,3:graduationDesign 用户组织管理系统,4:CAS单点登录论文.doc,5:CAS单点登录文献综述.doc,6:基于CAS的用户管理单点登录门户系统ppt.ppt)
赠送jar包:cas-client-core-3.2.1.jar; 赠送原API文档:cas-client-core-3.2.1-javadoc.jar; 赠送源代码:cas-client-core-3.2.1-sources.jar; 赠送Maven依赖信息文件:cas-client-core-3.2.1.pom; 包含翻译后...
资源列表(1:cas CAS Server,2:Cas_Client_One 授权系统,3:graduationDesign 用户组织管理系统,4:CAS单点登录论文.doc,5:CAS单点登录文献综述.doc,6:基于CAS的用户管理单点登录门户系统ppt.ppt)
运行服务器在 Linux/Mac 上: ./cas-strap run 在 Windows 上: cas-strap.bat run建立战争在 Linux/Mac 上: ./cas-strap war 在 Windows 上: cas-strap.bat war属性文件位置默认情况下,cas-strap 将使用WEB-INF/...
NULL 博文链接:https://starbhhc.iteye.com/blog/2302902
本文档详细介绍了cas单点登录的流程和相关参数的转移过程
cas4:Cas 4
cas的jar包,包括: 服务器端:cas-server-3.4.10-release.zip 客户端:cas-client-3.2.1-release.zip
cas-client-3.2.1和cas-server-3.5.2
cas-gradle-overlay-template:CAS Gradle叠加:通用CAS gradle战争叠加,以练习最新版本的CAS
Tomcat6.0.29 JDK6 CAS Server版本:cas-server-3.4.10 CAS Client版本:cas-client-3.2.1
- the cas-shiro-demo-app module is a demo web application which uses the CAS Shiro support library with protected area requiring CAS authentication : http://shiro.apache.org/cas.html - the cas-shiro-...
先行了解CAS基础概念: 在深入代码之前,建议先对CAS的基本概念有所了解,包括CAS服务器和客户端的角色以及它们之间的交互方式。 自己动手实践: 不仅要阅读代码示例,还要亲自动手实践,修改代码并观察不同的行为...
中央认证服务(CAS)介绍欢迎来到(通常称为CAS)的主页。 CAS是用于Web的企业多语言单点登录解决方案,它试图成为满足身份验证和授权需求的综合平台。 CAS是一个开放且有据可查的身份验证协议。 协议的主要实现是...
cas-bootadmin-overlay:CAS Spring Boot管理服务器覆盖模板
第1期:亚信 for CAS虚拟化平台介绍及部署指导 第2期:CAS开局指导 第3期:CAS产品虚拟机生命周期管理 第4期:ONEStor开局指导介绍 第5期:ONEStor概述和产品维护 第6期:H3C UIS 6.0超融合产品介绍及开局指导 ...
cas的jar包,包括: 服务器端:cas-server-3.4.10-release.zip 客户端:cas-client-3.2.1-release.zip
连接cas2 用于Express / Connect的CAS客户端中间件的完整实现,支持CAS 2.0+协议。 CAS(中央身份验证服务)是Web的单点登录/单点退出协议。 我们假设您已经熟悉CAS协议,如果不熟悉,请在使用前阅读本。 安装 ...