`
lliang54
  • 浏览: 4365 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

java并发编程艺术笔记1

 
阅读更多

1.偏向锁,顾名思义就是偏心的意思,当一个线程访问同步块时,会在该对象头增加自己偏向锁的线程ID,以后进入该对象就可以直接进入不需要通过cas 对对象头进行加锁和解锁

 

偏向锁的执行流程,如,线程1 执行同步块,检查对象头的位置是否存在当前的线程ID,有就直接进入,如果没有,就cas 替换掉mark head 对象头,将对象头的偏向锁的线程ID设置为自己的,然后执行同步体,如果此时也线程2也进来,也会执行线程1的步骤,如果通过CAS替换mark head 失败时,就会撤销偏向锁,暂停线程1,解锁,将对象头的偏向锁设为空,然后恢复线程,大家就开始竞争了,此时偏向锁就变成了轻量级锁,升级了,锁只能升级不能降级,优先级依次为:无锁->偏向锁->轻量级锁->重量级锁

 

2.轻量级锁就是自旋锁,线程再进入同步块,jvm 会在当前线程的栈帧创建用于记录锁的空间,并将对象头的mark word 复制到当前空间来,然后线程通过cas 操作将对象头中的mark word 替换成指向锁记录的指针,如果成功就是获得对象锁,如果失败,说明有其他线程竞争锁,当前线程尝试使用自旋来获取锁,如果通过自旋一直失败,就将锁升级为重量级锁

具体的流程,线程1 访问同步块时时,jvm 会分配用于记录存储锁的空间,并将对象头复制到当前存储锁的空间,通过cas 来修改对象头的指向锁记录的指针,如果成功将对象头替换成轻量级锁,执行同步体,如果失败了,说明有竞争,释放锁并唤醒等待线程,变成重量级锁,大家一起竞争,此时如果有线程执行以上步骤,在进行cas mark word 时失败会自旋,继续执行操作,等自旋不成功时,将锁修改成重量级锁,然后进入阻塞当前线程进入对待队列,等待唤醒,轻量级锁的优点是:在线程竞争不激烈时,不需要将线程挂起,唤醒步骤,不需要进行上下文切换,因为上下文切换需要耗费时间,可能比线程执行同步代码块的时间长,缺点是:线程自旋,浪费cpu 时间

所以偏向锁和轻量级锁适用于锁竞争不激烈的场合,如果竞争激烈,不适合。会浪费大量CPU资源

 

3.原子操作的实现原理

 原子本意:不能被进一步分割的最小粒子,原子操作就是不能分割,或者中断的一系列操作,

 

分享到:
评论

相关推荐

    Java并发编程的艺术.md

    《Java并发编程的艺术》笔记 第一章 并发编程的挑战 第二章 Java并发机制的底层实现原理 volatile的两条实现原则: 1. Lock前缀指令会引起处理器缓存回写到内存 2. 一个处理器的缓存回写到内存会导致其他...

    java并发编程.xmind

    自己总结的java并发编程的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。

    java并发编程的艺术读书笔记

    java并发编程的艺术读书笔记根据章节整理的核心内容,便于自己理解

    java并发源码集合-learnJava:《java8》、《java并发编程艺术》读书笔记、练习,jdk集合包源码阅读、练习

    这个名为"java并发源码集合-learnJava"的资源是针对深入理解Java并发编程和集合包源码的一份宝贵资料,主要涵盖了《Java 8》、《Java并发编程艺术》两本书的读书笔记和实践练习。通过学习这些内容,开发者可以更好地...

    《Java 并发编程实战》阅读整理笔记,附加了一些《Java 并发编程的艺术》中的内容,以及对原书结构进行了调整。.zip

    Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。Java语音项目的...

    learn-thread:Java多线程学习笔记

    学习线程介绍Java多线程学习PDF格式Java并发编程的艺术.pdf JAVA并发编程实践.pdf图解Java多线程设计模式-第2版.pdf代码code1是《 Java并发编程的艺术》的源码ThreadDesignPatterns是《图解Java多线程设计模式》第1...

    Java学习笔记

    以上只是Java学习之旅的冰山一角,深入每个知识点并不断实践,才能真正掌握Java编程艺术。后续章节将涵盖面向对象、JavaSE核心、异常处理、文件IO、多线程、网络编程等更深层次的主题,每一部分都是构建扎实Java技能...

    java学习资料总结2015新

    - **《JAVA并发编程实战》** 专门讲解 Java 并发编程,这对于开发高性能应用程序至关重要。 **3. 数据库相关书籍:** - **《OracleDatabase11g性能优化攻略》** 和 **《MySQL5权威指南(第3版)》** 等书籍提供了...

    java2018面试宝典

    - Java并发:考察多线程编程能力,包括线程池的使用、锁机制、并发工具类等。 - Java容器:如List、Set、Map的实现和使用,以及集合框架内部工作原理。 - Java I/O:需要理解Java I/O的NIO和AIO模型,以及网络编程中...

    深入java虚拟机源码-books-recommendation:后端进阶经典图书

    Java并发编程的艺术 java并发编程实战pdf及源码 Java虚拟机(第二版) 实战JAVA虚拟机JVM故障诊断与性能优化 HotSpot实战 Java虚拟机精讲 Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版) 鸟哥Linux...

    java光盘管理系统

    最后,考虑到系统的可部署性和可扩展性,可能使用了Tomcat或Jetty等Java应用服务器进行部署,同时系统可能支持多线程处理,以应对并发用户的需求。 总的来说,【Java光盘管理系统】是一个综合运用了Java编程语言、...

    java8集合源码分析-AboutJava:java相关知识(理论,代码)相关知识均是看书,博客等地方获取再由自己整理,如存在侵权,请告诉我

    (很多笔记来自java并发艺术一书) 多线程基础 synchronized volatile 线程间的通信 锁(重入锁,读写锁) 并发工具 增强的Future CompletableFuture 线程池技术 Java线程池Executors ForkJoin框架 原子操作类 JVM ...

    leetcode下载-studyday:记得我

    Java并发编程的艺术(虽然感觉讲的不是非常深入 不过很适合入门,基本够用!) Volatile 相关 内存可见性 和 防止指令重排 Synchronized相关 done 1.6后对Synchronized的优化 偏向锁 轻量锁 重量锁。 ReenTrantLock...

    java8集合源码分析-javaLearner:java学习者

    《深入理解Java虚拟机》、《并发编程的艺术》、《Java多线程核心编程艺术》、《Java8函数式编程》、《Redis设计与实现》、《RocketMQ技术内幕》、《Spring技术内幕》、《Spring源码深度解析》、《剑指Offer》、...

    Anki-Backup:My anki cards' backups. Java、大数据、数据结构八股文

    校招考察重点为Java(如果有时间可以深入看《深入理解Java虚拟机》和《Java并发编程的艺术》,并自行做卡片笔记)、计算机基础(操作系统、计算机网络、计算机组成原理)、数据库(MySql)、算法题。 卡片预览 卡片...

    ws-ldn-10:生成设计研讨会(ClojureClojureScript)

    3. **并发编程与代理**:利用Clojure的agent机制实现并发处理,以优化生成设计的性能。 4. **SVG与图形渲染**:使用ClojureScript操作SVG,创建动态、交互式的图形界面。 5. **实践项目**:指导参与者编写自己的生成...

    AndroidNotes:用于总结知识点

    - **线程与并发**:学习多线程编程,包括同步、锁机制以及并发工具类。 - **IO流**:理解输入输出流,学会文件操作和网络通信。 3. **Android进阶** - **Fragment**:在大屏幕设备上管理UI,以及如何在Activity...

Global site tag (gtag.js) - Google Analytics