版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/64214595


java并发编程艺术2

java并发机制的底层实现。

java-》编译——》。class字节码-》字节码加载到JVM-》字节码转化为汇编让cpu执行。

1volatile:

2volatile的定义

3volatile追加字节提高效率。

64字节行宽,当不足64字节是不同节点出现在统一缓存行,会出现相互加锁的情况。

2synchronized:

1、轻量级锁:轻量级锁不使用互斥量来进行加锁。它是在没有多线程竞争的情况下,减少重量级锁使用互斥量的方式加锁的开销。

对象头主要用来存储对象自身的运行数据。

1JVM在线程运行同步块之前创建栈帧用于存储锁记录的空间。

2将(所需访问的对象的)对象头中的markword复制到锁记录中。

3线程使用cas操作将markword替换成指向锁的指针,成功即加锁,失败则自旋。

2、偏向锁:

1锁不存在竞争并且由单一线程多次获得时使用偏向锁。

2锁记录中记录偏向锁的线程id,此后不需要cas操作来加锁或解锁。只需测试markword里是否存储偏向锁。

3测试成功则已获得锁,否则测试一下偏向锁标识,如果没有设置则使用cas竞争,如果设置了就用cas将偏向锁指向当前线程。

3自旋锁

1线程阻塞需要挂起线程和恢复线程,需要切换到内核态完成。

2有时候共享数据的锁定只会持续很短的时间,为其去挂起和恢复不值得。

3如果多线程并发访问同一对象,可以不对另一线程挂起,而是让它自旋(忙循环)。

对比:

4、原子操作

  

Java并发编程艺术----读书笔记(二)相关推荐

  1. Java 并发编程艺术 读书笔记

    第 1 章 并发编程的挑战 1.1.3 如何减少上下文切换 减少上下文切换的方法有无锁并发编程.CAS 算法.使用最少线程和使用协程. 无锁并发编程.多线程竞争锁时,会引起上下文切换,所以多线程处理数 ...

  2. JAVA并发编程艺术读书笔记(1,2章节)

    第一章 并发编程的挑战 为什么要使用并发编程? 主要是为了更有效地利用资源.即使是单核的CPU也可以多线程执行程序,多线程实际上是CPU分配时间片给各个线程,因为时间片非常短,所以看起来就像在同事执行 ...

  3. Java并发编程艺术读书笔记

    1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...

  4. Java并发编程实战读书笔记二

    第五章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 如下,如果list含有10个元素,线程A调用getLast的同时线程B调用deleteLast,那么getLast可能会报Arr ...

  5. Java并发编程艺术学习笔记(五)

    Java并发编程艺术学习笔记(五) Java并发容器和框架 Java为开发者也提供了许多开发容器和框架,可以从每节的原理分析来学习其中精妙的并发程序. 一.ConcurrentHashMap的实现原理 ...

  6. Java并发编程艺术阅读笔记(一)

    Java并发编程艺术阅读笔记(一) 1.什么是上下文切换 CPU通过时间片分配算法循环执行任务,执行完一个任务的时间片后就会切换到下一个任务.但是在切换任务之前会保存上一个任务的状态,在切换回该任务, ...

  7. java并发编程实践 读书笔记_Java - 并发编程实践(读书笔记)

    [注] 同步机制保证:1)原子性 2)内存可见性: Volatile变量只能保证:1)可见性: - 恰当的同步,同步的弱形式,确保对一个变量的更新以可预见的方式告知其他线程. [注] 用锁来协调访问变 ...

  8. Java并发编程实战读书笔记

    Java并发编程 标签(空格分隔): 并发 多线程 基础 线程 在执行过程中,能够执行程序代码的一个执行单元,在Java语言中,线程有四种状态:运行,就绪,挂起,结束. 并发特性 原子性 一个操作不会 ...

  9. Java并发编程实战读书笔记三

    第七章 取消和关闭 Java没有提供任何机制来安全的终止线程,虽然 Thread.stop 和 suspend 等方法提供了这样的机制,但由于存在着一些严重的陷,因此应该避免使用 7.1任务取消 7. ...

最新文章

  1. 关于微服务架构的思考
  2. 对Erlang开发者的几点建议
  3. JavaScript数组方法大全解
  4. pycharm中一直跳出updating indices...indexing
  5. php get获取cookie值,golang web开发获取get、post、cookie参数
  6. 十三不香了?不止去掉刘海,iPhone14或改用QLC闪存:最高2TB容量
  7. 数据分析避坑必读:让人怀疑人生的七大悖论
  8. Hibernate查询技术(2)
  9. Java发送https请求,综合post请求,get请求,获取网络返回的信息
  10. windows安装ubuntu系统的注意事项小记
  11. java clear new_Java基础之Map的clear和new的区别
  12. 判断输入框是不是数字_【Excel技巧】老板说,“我只要数字!数字!”
  13. 已解决-怎么关CSDN的一周小结
  14. 出圈!迅镭激光切割设备亮相热播剧《麓山之歌》
  15. C# 母版页页面导航
  16. Java isEmpty()方法
  17. 11月末.wang域名总量15强:易名中国榜首 份额涨5%
  18. 2.股票入门课(新版)
  19. warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
  20. [零基础学python]集成开发环境(IDE)

热门文章

  1. linux 系统装中文输入法 fcitx
  2. SAP HANA中的存储过程(sql procedure)
  3. 准确率(Precision)、召回率(Recall)以及综合评价指标(F1-Measure )
  4. Action 相关组件
  5. Jackson通过反射将Json转化为java对象
  6. C# 7.2和8.0路线图
  7. EBS服务重启脚本(应用和数据库)
  8. 基于 Android NDK 的学习之旅----- C调用Java
  9. AgileEAS.NET平台开发实例-药店系统-报表开发(上)
  10. 防止ASP.NET按钮多次提交代码