Java并发编程艺术----读书笔记(二)
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并发编程艺术----读书笔记(二)相关推荐
- Java 并发编程艺术 读书笔记
第 1 章 并发编程的挑战 1.1.3 如何减少上下文切换 减少上下文切换的方法有无锁并发编程.CAS 算法.使用最少线程和使用协程. 无锁并发编程.多线程竞争锁时,会引起上下文切换,所以多线程处理数 ...
- JAVA并发编程艺术读书笔记(1,2章节)
第一章 并发编程的挑战 为什么要使用并发编程? 主要是为了更有效地利用资源.即使是单核的CPU也可以多线程执行程序,多线程实际上是CPU分配时间片给各个线程,因为时间片非常短,所以看起来就像在同事执行 ...
- Java并发编程艺术读书笔记
1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...
- Java并发编程实战读书笔记二
第五章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 如下,如果list含有10个元素,线程A调用getLast的同时线程B调用deleteLast,那么getLast可能会报Arr ...
- Java并发编程艺术学习笔记(五)
Java并发编程艺术学习笔记(五) Java并发容器和框架 Java为开发者也提供了许多开发容器和框架,可以从每节的原理分析来学习其中精妙的并发程序. 一.ConcurrentHashMap的实现原理 ...
- Java并发编程艺术阅读笔记(一)
Java并发编程艺术阅读笔记(一) 1.什么是上下文切换 CPU通过时间片分配算法循环执行任务,执行完一个任务的时间片后就会切换到下一个任务.但是在切换任务之前会保存上一个任务的状态,在切换回该任务, ...
- java并发编程实践 读书笔记_Java - 并发编程实践(读书笔记)
[注] 同步机制保证:1)原子性 2)内存可见性: Volatile变量只能保证:1)可见性: - 恰当的同步,同步的弱形式,确保对一个变量的更新以可预见的方式告知其他线程. [注] 用锁来协调访问变 ...
- Java并发编程实战读书笔记
Java并发编程 标签(空格分隔): 并发 多线程 基础 线程 在执行过程中,能够执行程序代码的一个执行单元,在Java语言中,线程有四种状态:运行,就绪,挂起,结束. 并发特性 原子性 一个操作不会 ...
- Java并发编程实战读书笔记三
第七章 取消和关闭 Java没有提供任何机制来安全的终止线程,虽然 Thread.stop 和 suspend 等方法提供了这样的机制,但由于存在着一些严重的陷,因此应该避免使用 7.1任务取消 7. ...
最新文章
- 关于微服务架构的思考
- 对Erlang开发者的几点建议
- JavaScript数组方法大全解
- pycharm中一直跳出updating indices...indexing
- php get获取cookie值,golang web开发获取get、post、cookie参数
- 十三不香了?不止去掉刘海,iPhone14或改用QLC闪存:最高2TB容量
- 数据分析避坑必读:让人怀疑人生的七大悖论
- Hibernate查询技术(2)
- Java发送https请求,综合post请求,get请求,获取网络返回的信息
- windows安装ubuntu系统的注意事项小记
- java clear new_Java基础之Map的clear和new的区别
- 判断输入框是不是数字_【Excel技巧】老板说,“我只要数字!数字!”
- 已解决-怎么关CSDN的一周小结
- 出圈!迅镭激光切割设备亮相热播剧《麓山之歌》
- C# 母版页页面导航
- Java isEmpty()方法
- 11月末.wang域名总量15强:易名中国榜首 份额涨5%
- 2.股票入门课(新版)
- warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
- [零基础学python]集成开发环境(IDE)
热门文章
- linux 系统装中文输入法 fcitx
- SAP HANA中的存储过程(sql procedure)
- 准确率(Precision)、召回率(Recall)以及综合评价指标(F1-Measure )
- Action 相关组件
- Jackson通过反射将Json转化为java对象
- C# 7.2和8.0路线图
- EBS服务重启脚本(应用和数据库)
- 基于 Android NDK 的学习之旅----- C调用Java
- AgileEAS.NET平台开发实例-药店系统-报表开发(上)
- 防止ASP.NET按钮多次提交代码