书籍阅读:

  • 方腾飞的《Java并发编程的艺术》(虽然豆瓣上的评价一般,但是对于构建Java并发的整体映像还是有所提高的,至少我知道了有哪些东西要深入学习)
  • 《The Art of Multiprocessor Programming》 这本书比较艰涩,不是很好懂,但是过一遍还是好处多多,建议初学者了解下概念的过过,后期可以再来翻看
  • 《Java Concurrency in Practice》 这本书号称Java并发编程的圣经,确实可以看出作者有很丰富的并发实践经验

学习心得 -- Java并发包的基础概念

了解Java并发包有哪些工具以及相关基础概念,有Java tutorial的concurrent章节和JCIP一书就足够了。

JCIP一书的整体脉络如下:

  1. 介绍多线程的利弊;
  2. 解释线程安全是什么以及如何获得线程安全;
  3. 从高频的使用场景出发,介绍对象传递,类的设计等如何获得线程安全;
  4. 从Java并发包出发,介绍高层的并发组件有啥以及相关原理;
  5. 介绍并发的一些弊端以及如何避免;
  6. 从Java并发包出发,介绍底层的并发组件以及原理;

总体看,该书有两条主线,1 从高到低介绍Java并发包的一些重要组件和原理; 2 从并发场景出发,介绍如何利用这些组件来获得线程安全。其中第二部分是这本书最大的特色,也是书名中有Practice的原因。

书中提到了几个比较有意思的地方,

首先,到底什么是线程安全?

A class is thread-safe if it behaves correctly when accessed from multiple threads, regardless of the scheduling or interleaving of the execution of those threads by the runtime environment, and with no additional synchronization or other coordination on the part of the calling code.

这个定义中,作者强调了正确地被多线程访问, 同时要求没有外加其他同步的手段。

那么,如何获得线程安全?

Writing thread-safe code is, at its core, about managing access to state, and in particular to shared, mutable state.

书中将获得线程安全总结为维护代码的状态,如果一个类是无状态的(immutable),则自带线程安全的属性(函数式编程便是通过这种方式达到自带的线程安全)。这些状态大致可以理解为类中的非常量变量。

通过这个可以了解到线程安全的本质,其实是共享变量,也就是状态,有状态的多线程访问就需要同步机制来保证线程安全。

如何理解Java提供的用于处理并发的组件?

JDK提供的并发组件,大致可以分为两类, 一类是预防为主,防止错误发生(race condition, visibility),大部分组件都是这类,还有一类是发生了错误但是能够知道并及时重试(Atomic类提供的CAS),形象的例子有如 十字路口的信号灯,在流量小的时候,采用过多的预防措施反而会适得其反,例如白白的在大部分时间都没有车的道路上等红灯,这个时候适合采用犯错(例如去掉红绿灯,让车自由行驶,遇到其他车的时候互相让位即可)后解决的方法,能够获得最大的效率,在流量大的时候,红绿灯的作用就能够凸显出来,其实规则的制定一定是在规模较大的时候才有意义,这也是预防的初衷。

类比到并发领域就是,在线程数量大,采用预防的措施比较好,这样大部分线程就不会因为概率小的CAS重试浪费大量的cpu周期,在线程数量小的时候,CAS的意义就比较大,因为预防措施带来的线程切换等的开销可能大于CAS的等待,而且较少的线程也会让CAS重试的等待时间变少。

理解这些基础概念的核心,我觉得其实就是解决两点问题:

  • Thread Interleaving,即多个线程读写共享变量造成的不一致问题;
  • Visibility,为了提高性能,处理器的每个执行单元其实都有缓存,这个虽然提高了某些数据的访问性能但是却给并发编程带来了数据读取的不一致性问题;

当然要更深入理解并发,还需要知道如何提升并发的性能,例如锁的粒度如何把握?(经典的例子可以JDK的ConcurrentHashMap),底层一点的知识也得了解,例如CAS和Java Memory Model。

PS. 最近又看了《深入理解Java虚拟机》中的并发部分,发现理解的又有变化,重新整了下Java并发编程知识图谱的2.0版本:

从实现角度透彻理解并发

再深入下去的话,没有比经典的JDK更合适的了,当然Google的Guava包也值得学习,从这些经典代码了解各种组件的实现可以加深理解并更好的使用它们,但是作为应用端的程序员,倒是并不需要写出这种较为底层的代码(无锁化)。

Java 并发编程如何入门相关推荐

  1. 《 Java并发编程从入门到精通》目录和序言

    目 录 第一部分:线程并发基础   第1章 概念部分   1 1.1 CPU核心数.线程数 (主流cpu,线程数的大体情况说一下) 1 1.2 CPU时间片轮转机制 2 1.3 什么是进程和什么是线程 ...

  2. 《 Java并发编程从入门到精通》Thread安全与不安全

    作者:张振华    购买链接:天猫商城  JD商城  当当书店 鸟欲高飞先振翅,人求上进先读书.本文是原书的第3章  Thread安全3.2 什么是不线程安全.3.3什么是线程不安全. 3.2 什么是 ...

  3. 极客时间《Java并发编程》学习笔记

      该领域是跟着"极客时间"平台的课程<Java并发编程>入门的,讲师是王宝令.说实话,这个领域如果抱着大部头的书就啃的话,由于缺少实践很难会建立一个体系,即不知道为什 ...

  4. 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记

    <Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...

  5. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  6. Java并发编程(中下篇)从入门到深入 超详细笔记

    接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...

  7. java并发编程入门_探讨一下!Java并发编程基础篇一

    Java并发编程想必大家都不陌生,它是实现高并发/高流量的基础,今天我们就来一起学习这方面的内容. 什么是线程?什么是进程?他们之间有什么联系? 简单来说,进程就是程序的一次执行过程,它是系统进行资源 ...

  8. Java 并发编程入门

    JUC 写在前面 推荐阅读 http://ifeve.com/java-memory-model-1/ :深入理解 Java 内存模型-程晓明 https://segmentfault.com/a/1 ...

  9. java并发编程入门_Java并发编程入门,看这一篇就够了

    2.3 资源限制的挑战 什么是资源限制 资源限制指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源. 硬件资源包括:带宽的上传下载速度.硬盘读写速度和CPU的处理速度等 软件资源包括:线 ...

  10. Java 并发编程-不懂原理多吃亏(送书福利)

    作者 | 加多 关注阿里巴巴云原生公众号,后台回复关键字"并发",即可参与送书抽奖! ** 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步. ...

最新文章

  1. MS SQL “ 无法启动分布式事务“问题的解决思路
  2. 从入门到精通聊聊区块链
  3. 09Mybatis_入门程序——删除用户以及更新用户
  4. SQL语法之基础查询(进阶1)and条件查询(进阶2)
  5. LeaFlet学习之GridLayer扩展
  6. Express的基本路由实现对get和post等的请求和响应
  7. 关键词匹配(Ac自动机模板题)
  8. ios 捕抓crash_ios crash的原因与抓取crash日志的方法
  9. 腾讯图片处理 Tencent AlloyTeam 2013
  10. 如何解决SQL Server中SQL身份危机
  11. opencv4 c++ 提取图片中的白色区域_【从零学习OpenCV 4】点集拟合
  12. Android自定义ScrollBar,android自定义View之垂直的滚动条
  13. 1_线性表之顺序存储
  14. 阿里巴巴android图标素材网,阿里巴巴图标素材库
  15. 烤仔观察丨和你息息相关!DCEP 能否领跑?各国数字货币都在搞什么?
  16. 游戏版署过审注意事项
  17. 2021-2027全球与中国专利分析服务市场现状及未来发展趋势
  18. 【InSAR 笔记2】哨兵一号精轨数据批量下载【修改0704】
  19. 基于Domoticz智能家居系统(十三)Domoticz-3.8153在Tiny6410开发板上的移植
  20. 玩客云刷入armbian系统总结

热门文章

  1. hash冲突以及hash冲突的解决方法
  2. 设计师提高效率必备的10大在线工具
  3. mysql基础-基本的命令行操作
  4. 神经网络可以解决的问题,神经网络修复老照片
  5. 视频拍摄和剪辑经验分享|南京
  6. python+selenium+tkinter打造网易云音乐下载器
  7. 【我爱破解】对某软件的逆向分析与注册机编写
  8. 红米7pro支持html不,可以畅快的刷机了,红米Note 7 Pro等机型适配 TWRP
  9. 《三国演义》分章节梗概
  10. iwconfig 安装_arm linux iwconfig 等