`
lliu26
  • 浏览: 25657 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)java CAS原语

 
阅读更多

java 中的synchronized关键字是悲观锁 也叫独占锁 
所谓悲观锁就是某一线程独占资源,其他线程只能干等着,这种锁在高并发中性能很差 

还有一种实现锁的方式是乐观锁 
乐观锁实际上并不加锁,当计算遇到冲突或者说前后不一致时会重试 直到成功 

乐观锁采用的机制叫CAS compare and swap 
CAS有3个操作数 内存值V 要跟内存值做比较的值A 和 新值 B 
其操作逻辑为 

Java代码  收藏代码
  1. while(true){  
  2. if(V == A){  
  3.    V = B;  
  4.    return ;  
  5. }else{  
  6.    A = V;  
  7. }  
  8. }  

 

CAS的操作对象为volatile类型 
volatile类型变量是:CPU直接读写变量所在的内存 而不是把变量copy到寄存器操作 
这样对变量的操作所有线程都是可见的 
这样做的结果是减少了并发时冲突的概率 但不能完全避免

 

  1. volatile类型:  
  2. 根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。  
  3.   
  4. 每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。  
  5.   
  6. 所以,同一变量的值在工作内存和主存中可能不一致。volatile其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。  

 

 

转自:http://xuliangyong.iteye.com/blog/709811   版权归原创作者所有。

 

分享到:
评论

相关推荐

    Java CAS底层实现原理实例详解

    "Java CAS底层实现原理实例详解" Java CAS(Compare And Swap)是一种机制,用于解决多线程并行情况下使用锁造成性能损耗的问题。CAS 的概念是,比较并交换,解决多线程并行情况下使用锁造成性能损耗的一种机制。...

    Java并发编程全景图.pdf

    Java提供了多种同步原语来保证线程安全,主要包括关键字volatile、synchronized以及CAS操作。volatile关键字保证了变量的可见性和部分有序性。synchronized关键字提供了互斥访问,可以用于方法或代码块,确保一次...

    Java并发的CAS原理与ABA问题的讲解

    Java并发编程中的CAS(Compare and Swap)是一种无锁同步机制,它是实现线程安全的关键技术。CAS操作包含三个参数:内存地址V、预期原值A和新值B。当且仅当内存地址V当前存储的值等于预期原值A时,CAS会将V的值更新...

    java 多线程同步

    在JDK 5.0中,引入了大量并发改进,包括JVM级别的变化,如引入了Compare-and-Swap(CAS)指令,这是一种轻量级的并发原语,能够在硬件层面支持多线程对共享内存位置的无锁更新。这使得开发者能够创建高度可伸缩的并发...

    Java并发编程:设计原则与模式(第二版)-3

    6. **原子性操作与CAS**:Java提供了一组原子变量类(AtomicInteger、AtomicLong等)和Unsafe类,它们支持无锁编程和CAS(Compare and Swap)操作,用于实现高效且线程安全的更新操作。 7. **并发异常处理**:书中...

    《Java并发编程实战》的高清完整PDF版

    4. **原子操作与CAS**:`java.util.concurrent.atomic`包中的原子变量类如`AtomicInteger`提供了无锁编程的能力。比较和交换(CAS)操作是其底层实现的关键,理解CAS的工作原理可以帮助你编写更高效的并发代码。 5....

    java自带并发框架

    Java自带的并发框架通过提供高级的并发工具和类,使开发者能够更安全、更高效地编写多线程程序,避免了直接操作底层并发原语带来的复杂性和潜在风险。通过理解和熟练使用这些工具,我们可以构建出更健壮、更具伸缩性...

    java面试题_多线程(68题).pdf

    4. **CAS(Compare and Swap)**:CAS是一种无锁同步原语,它利用硬件提供的原子操作(如CPU的cmpxchg指令),在不使用锁的情况下实现并发操作。Java并发库中的`java.util.concurrent.atomic`包中的原子类如...

    CAS

    CAS并发原语体现在Java语言中就是sun.misc.Unsafe类中的各个方法。 调用Unsafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能。 由于CAS是一种系统原语,原语属于操作系统用语范畴,是...

    Java Unsafe类1

    然而,`Unsafe`的存在使得Java能够执行一些低级别的操作,比如直接操作内存、字段偏移量计算、数组元素的直接访问、线程的挂起与恢复以及无锁编程中的CAS操作。 1. 操纵对象属性: `Unsafe`类允许开发者获取对象中...

    Java面试.docx

    - CAS在Java中通过`sun.misc.Unsafe`类的原语方法实现,这些方法是native的,直接与硬件交互。 - CAS的缺点包括循环时间长、只能保证单个共享变量的原子操作,以及可能出现ABA问题。 5. **ABA问题**: - 当一个...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    本文将全面介绍Java并发编程的基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具以及Executor服务。 1. **基础知识** - **并发与并行**:并发是指多个任务在同一时间段内交替执行,...

    JDK8中sun.misc下UnSafe类源代码 UnSafe.java

    4. **锁操作**:UnSafe支持底层的锁原语,如`compareAndSwapInt`、`compareAndSwapLong`等CAS操作,这些是实现非阻塞并发算法的关键。 5. **数组操作**:除了对对象字段的操作,UnSafe还可以直接操作数组,如`...

    Caffeine是一个基于Java8的高性能缓存库

    它使用了自旋锁和CAS(Compare and Swap)原语来减少锁的使用,从而降低线程阻塞。 2. **智能预测**:Caffeine引入了基于LFU(Least Frequently Used)和LFU的变种——LFU-Adaptive,以及基于TTL(Time To Live)的...

    JAVA并发编程实践中文版

    这些集合类的设计和实现策略,如分段锁和 CAS(Compare and Swap)操作,对于理解高性能并发编程至关重要。 此外,书中还会讲解如何进行有效的并发测试,包括使用Junit和并发测试工具来发现并修复并发问题。最后,...

    一篇看懂Java中的Unsafe类

    4. **并发相关**:提供低级同步原语,如CAS操作、线程调度、volatile读写以及内存屏障。 5. **Memory相关**:直接内存访问,用于高效地读写操作系统内存。 6. **系统相关**:获取系统相关的内存信息,如地址大小、...

    并发编程demo测试包含线程池、锁、队列、信号、cas等等

    在Java中,Unsafe类提供了CAS操作,但这个类不推荐直接使用,通常通过Atomic类(如AtomicInteger)来间接使用。CAS避免了锁的开销,但在高并发场景下可能会导致自旋,消耗CPU资源。 以上就是并发编程DEMO涉及的主要...

    一个高性能的Java缓存库.zip

    它采用了读多写少的并发模型,利用CAS(Compare and Swap)原语和锁分离技术来确保线程安全,减少了同步开销。此外,Caffeine使用了预测式加载(predictive loading)和写后读(write-behind)等策略,预先加载可能...

Global site tag (gtag.js) - Google Analytics