文章目录

  • 1.概述
  • 1.1. 走进并行世界
    • 1.2 java并行程序基础
    • 1.3 jdk并发包
    • 1.4 锁的优化以及注意事项
    • 1.5 并行模式与算法
    • 1.6 java 8 9 10与并发
    • 1.7 使用akka构建高并发程序
    • 1.8 并行程序调试
    • 1.9 jetty核心代码分析

1.概述

看完这本书 看看meter的实现逻辑

1.1. 走进并行世界

忘掉并行、摩尔定律
并发与并行的区别,这个讲的好。
多线程死锁、活锁
amdahl定律
32位long类型的数据读取不是原子性的。
指令重排与happen-Before原则。

1.2 java并行程序基础

主要讲解了线程相关的内容,以及一些重要的关键字,可以一看。

1.3 jdk并发包

本章由浅入深,讲解的非常好,逐步深入,很适合,初学者以及第二次观看

同步控制

  1. 讲解了synchronized 关键字的使用
  2. 重入锁的好搭档,condition 和object的wait很像
  3. 讲解了信号量,相当于同时进入临界区的个数限制
  4. 讲解了读写锁的分离思想以及性能测试
  5. 倒数计数器,火箭发射程序
  6. 循环栅栏 军队队伍集合案例
  7. 现场阻塞工具lockSupport的使用
  8. guava的限流 RateLimiter

线程池讲解

  1. 什么是线程池
  2. jdk的已有线程池介绍以及不好的地方
  3. 线程池内部实现ThreadLocalPool
  4. 拒绝策略介绍,以及自定义拒绝策略
  5. 扩展线程池,执行方法之前 执行之后的AOP
  6. 线程池大小的设置公式
  7. 自定义线程池打印现场堆栈信息(这个很重要)
  8. fork join框架 ForkJoinPool
  9. guava中线程池的扩展

jdk并发容器

  1. hashmap list currentHashMap CopyOnWriteArrayLisy
  2. BlockingQueue
  3. 数据有序性的跳表 (有用)

JMH性能测试

  1. 工具介绍以及使用

1.4 锁的优化以及注意事项

一些建议

  1. 减少锁持有时间
  2. 减小锁粒度 currentHashMap 分段锁
  3. 用读写分离锁代替独占锁
  4. 锁分离,ArrayBlockingQueue take()方法是从头部取数据,而put()方法是从尾部放数据,这两个是互不干扰的,不应该用一个锁。
  5. 锁粗化 将for循环中的锁提到for循环之外

java虚拟机对锁优化所做的努力

  1. 偏向锁,第一个获取锁的线程,下次请求还是获取锁,无同步,锁竞争激烈的时候,效果不好
  2. 轻量级锁,将对象头部作为指针,指向持有锁的线程堆栈的内部,来判断一个线程是否持有对象锁。如果加锁失败,则膨胀为重量级锁。
  3. 自旋锁,虚拟机最后的努力,空循环几个周期,万一线程自己获取了锁呢
  4. 锁消除,有意或者无意引入的锁,虚拟机根据逃逸分析,如果安全,那么就会消除锁

threadLocal 介绍

  1. threadLocalMap 在线程退出的时候会清理,建议主动设置null ,防止内存泄漏

无锁

  1. cas 循环,一旦检测到冲突产生,就重试当前操作直到没有冲突为止
  2. 无锁没有锁竞争带来的系统开销,也没有线程间平凡调度带来的开销
  3. 大部分现代化处理器都支持原子化的CAS指令
  4. 无锁的 AtomicInteger
  5. java中的指针 Unsafe类 简单介绍,并没有深入讲解
  6. 无锁的引用对象,AtomicReference 对普通的对应引用,可以保证你在修改对象引用时的线程安全性 有ABA的问题
  7. 带有时间戳的对象引用 AtomicStampedReference 解决对象在修改过程中丢失状态。
  8. 数组也能无锁,AtomicIntegerArray
  9. 让普通变量也享受原子操作 AtomicIntegerFieldUpdater 这个讲的比较好,但是不常用,我浏览了一下,没仔细看
  10. 线程之间互帮互助,Synchronous 容量为0,任何一个对Synchronous的写需要等待一个对Synchronous的读操作。后续讲解了源码相关的,比较深入,可以一看。

有关死锁的问题

  1. 哲学家进餐问题,没有深度

1.5 并行模式与算法

单例模式

不变模式

  1. java String 类型

生产者消费者模式

无锁缓存框架 disruptor

  1. 一个案例 没怎么仔细看

cpu cache 优化,解决伪共享的问题

  1. 一堆long 占用64个字节,正好是一个数据块,这个我写过博客

feature 模式

  1. 自定义feature模式

下面是排序算法,没怎么看

网络NIO
nio相关案例,没怎么看,代码太多

1.6 java 8 9 10与并发

函数作为一等公民

函数式编程基础

  1. FunctionalInterface 注解
  2. lambda表达式

增强的Future:CompletableFuture

  1. CompletableFuture 实现了 Futureje接口,也实现了 CompletionStage接口(40多个方法)
  2. 支持超时时间

读写锁的改进 StampedLock

  1. 读写锁虽然分离了读和谐的功能,但是读锁会完全阻塞写锁。
  2. StampedLock的内部实现是基于CLH锁的,CLH锁是一种自旋锁,它保证没有饥饿发生,并且可以保证FIFO的服务顺序。
  3. 基本思想:锁维护一个等待线程队列,所有申请锁但是没有成功的线程都记录在这个队列中,每个节点(一个节点代表一个线程)保存一个标记为(locked)用于判断当前线程是否已经释放了锁。
  4. 关于原理讲解的这点没仔细看

原子类增强

  1. 更快的原子类 LongAdder
  2. currentHashMap的增强,map.compyteIfAbsent

发布和订阅模式

  1. java 9 反应式编程,反映社编程用于处理异步流中的数据,每当应用收到数据项,便会对它进行处理,反应式编程以流的形式处理数据,因此在内存中使用效率更高。因为是jdk 9的简单看看,没有了解,因为jdk8还会持续很长一段时间。

1.7 使用akka构建高并发程序

因为学习了netty,akka能做的,netty也能做,netty能做的,akka不能做,所以这一章我是直接跳过的,因为没机会用到,专心搞netty就好了。

1.8 并行程序调试

这一章没啥好看的,讲解的主要是eclipse的调试,和IDEA没关系,而且早就不用eclipse了,因为跳过。关于调试的这点我还是懂一点的。

而且本章内容很多,看看也无妨,我就是大概浏览了一下。

1.9 jetty核心代码分析

因为不用,所以没看

【读书笔记】实战Java高并发程序设计(第2版)读书笔记相关推荐

  1. 《实战 Java 高并发程序设计》笔记——第3章 JDK 并发包(二)

    文章目录 3.2 线程复用:线程池 3.2.1 什么是线程池 3.2.2 不要重复发明轮子:JDK 对线程池的支持 1. 固定大小的线程池 2. 计划任务 3.2.3 刨根究底:核心线程池的内部实现 ...

  2. 《实战Java高并发程序设计》github笔记和源码

    笔记 <实战Java高并发程序设计>中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了 笔者做了相关笔记并整理源代码,欢迎 ...

  3. 实战java高并发程序设计-笔记进行中

    <JAVA并发编程实践>:出书时间太早,内容比较散,专业术语翻译较早和现在有差异 <Java并发编程的艺术>:手绘图较多文字内容较少,主要讲解并发实现的底层原理和面临的问题,底 ...

  4. java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  5. 【实战Java高并发程序设计6】挑战无锁算法

    我们已经比较完整得介绍了有关无锁的概念和使用方法.相对于有锁的方法,使用无锁的方式编程更加考验一个程序员的耐心和智力.但是,无锁带来的好处也是显而易见的,第一,在高并发的情况下,它比有锁的程序拥有更好 ...

  6. 《实战Java高并发程序设计》.pdf

    关注"Java后端技术全栈" 回复"面试"获取全套面试资料 如今,秒杀已经变得十分常见,我们也都习以为常. 然而,从技术的角度来说,秒杀对于Web系统是一个巨大 ...

  7. 今天开始拜读一本大神写的书《实战Java高并发程序设计 》

    基本信息 书名:实战Java高并发程序设计 定价:69.00元 作者:葛一鸣著 出版社:电子工业出版社 出版日期:2015-10-01 ISBN:9787121273049 字数:493000 页码: ...

  8. 《实战Java高并发程序设计》读后感

    写在前面无关的内容 白驹过隙,看下日历已经毕业4年多,加上在大学里的4年,算算在计算机界也躺了八年,按照格拉德韦尔的1万小时定律差不多我也该成为行业的专家了,然后并没有.当看着"什么是Jav ...

  9. 最新炼数成金实战Java高并发程序设计+完整课件

    课程目录: 1.前言 2.多线程基础[vxia.net] 3.Java内存模型和线程安全 4.无锁 5.JDK并发包1[vxia.net] 6.JDK并发包2 7.并行设计模式 8.NIO和AIO[v ...

最新文章

  1. 快卷疯了!被面试官说我是今天第5个背八股文的。。。
  2. numpy中的一些常见函数
  3. 思考:开发者如何挑选最合适的机器学习框架?
  4. c语言遇到非法字符,98行的四则计算器.(支持括号)加入了非法字符的检测
  5. ae的渲染引擎:cineware
  6. Linux bzip2/gzip/zip/tar 命令详解
  7. MyCP(课下作业,必做)
  8. web页面--前端明水印
  9. 【渝粤教育】广东开放大学 文学创意写作 形成性考核 (58)
  10. 最牛逼的微服务架构方案,没有之一!
  11. Recovering BST CodeForces - 1025D (区间dp, gcd)
  12. 关于NSOperation的几个常见问题
  13. C语言:求矩阵非对角线元素的和
  14. go 语言markdown 转 html,Golang中国的markdown转HTML怎么实现
  15. 计算机硬件报警声音,电脑开机报警声音大全详解及处理
  16. java 获取当前时间的时间戳(秒级与毫秒级)
  17. 【Docker】MySQL 主从配置(一主一从)
  18. 口袋的天空(洛谷 P1195)
  19. 全球-专线香港-大陆快速包税清关
  20. 分享一些程序员必备网站

热门文章

  1. ROG游戏手机5跑分曝光:全球首发18GB超大内存
  2. 街头人手一件加拿大鹅?店员道出真相:90%都是假货
  3. 游族网络:中诚信国际将公司主体及游族转债列入信用评级观察名单
  4. 5G手机将不用流量可免费看电视,网友:流量免费,内容付费?
  5. 东风本田4S店违规收取续保押金 ,电台主持在线怒怼经理,反被指无教养?
  6. 前魅族副总裁李楠上手魅族17:颜值提升了
  7. 华中数控预计继续亏损 拟靠关联交易增收存疑
  8. 暴风集团冯鑫被批捕:涉嫌对非国家工作人员行贿罪、职务侵占罪
  9. 法拉第未来获得2.25亿美元债权及信托融资
  10. 设计师不用下课了吧?小米突然官宣性价比之王旗舰:升降式摄像头