《实战java高并发程序设计》源码整理及读书笔记
作者:13
GitHub:https://github.com/ZHENFENG13
版权声明:本文为原创文章,未经允许不得转载。
前言
不要被标题吓到,虽然书籍是《实战java高并发程序设计》,不过本文只是写一写本人的一点读书感受,顺便整理了一下书中的代码,其实我原本是不想敲代码的,不过去网络上搜了一圈之后,发现根本没有现成的,只能自己敲了,既然整理好了一部分代码,索性就上传到GitHub上,让大家都看一看,节省一下其他人的时间,GitHub地址在这里,无法访问的话,也可以到码云的仓库中看,地址是点这里,给项目个star吧。
书籍简介

当时在京东选书的时候就是被这本书的封面给吸引了,莫名的挺喜欢这本书,刚好那段时间也想补充一下这方面的知识点,看了一下书籍简介就下单购买了。

2017年4月10号开始读,到30号读完,中间的二十天基本都是抽出中午的一小段时间看书,每天虽然看的不多,但是加在一起就不一样了,事情总会做完的,让我想起高中时物理老师的一句话:
“小步走,不停步,等于前进一大步”
虽然分开来看量很小,但是慢慢积累下来,概念就不同了。
整本书看下来感觉还不错,案例的数量很大、质量也很高,动手实践一下得到了不小的收获,也达到了买书前的预期,理论知识不是特别的晦涩难懂、代码也很清晰,对这本书的好评是远远多于差评的,知识点丰富、学到了想要学的知识点。
读书笔记
书中就是知识点的介绍,还有一些代码案例,作者讲解的也挺详细的,这篇文章里就不会讲了,都是些概念性的知识。
书是好书,案例也是好案例,个人看来,这本书也是有缺点,当然,这个只是个人看法,对这本书最大的槽点应该就是插图了:


书中的插图基本都是这个风格,而且由于印刷原因有些插图有些不清楚,因此最大的槽点是这个。
- 第一次啃书的过程中,并没有特别跟着作者的思路去敲代码案例,只是用笔在书本里做了一些注释,因为我觉得网上应该会有相关的源码资源,结果是我找了挺久没找到,因此就自己动手写了一遍,我觉得应该也有人和我一样懒得去敲一遍代码,所以就打算公布在网上了。
- 代码里都是两个线程,下载了源码后,可以自行在编辑器里模拟多个线程的运行情况。
- 对线程和高并发的认识有所加深,这次写文章、整理源码的过程中又读了一遍全书,感觉收获颇丰,印象更加深刻了,可能过一段时间又忘了,谁知道呢。
看第一遍的时候,其实有过思想准备,也对自己说过,如果书本中理论感太强,就慢慢看,一天翻个几页,如果代码案例多的话,就多敲敲代码。看了之后发现,有些章节确实比较偏理论,不过耐下心来也是能看得下去,每天中抽些时间翻个几页,慢慢的也就看完了,至于敲代码这件事就没去做,因为我觉得网上应该会有相关的资源的,哪知道,一条都没。
印象比较深的几个知识点是指令重排、比较交换CAS、ThreadLocal、读写锁优化,在这里提一下,详细的我就不写了,想了解的朋友自行搜索,这些知识点书里都做了详细的介绍,会让你收获满满的。
读书心得
不知道大家有没有这种感觉,对多线程、锁这种知识点“又爱又恨”,感觉很近又感觉很远,想去认真探索一个究竟,但是终究没能迈出第一步,或者迈出第一步也不想继续前进了,觉得这些知识点特别难搞。
对线程这一块儿的知识比较模糊,初学Java的时候,也没有特别着重的去看,觉得有些晦涩难懂,后来工作了,也没有接触过类似的编码要求,因此造成了一个思维怪圈,对之莫名的好奇,又无法完全说服自己去认真的学习它并对之有一个透彻的理解,平时工作中确实用的不多,而且试着学过,又觉得过程比较枯燥,但是也的的确确知道这个知识点的重要性,也知道一些框架或者工具底层肯定是用到了这些知识点的,只不过是自己没有动手写过相关代码罢了。
其实看这本书,也是因为猎奇心理吧,不想总是对一个知识点有小小的恐惧,我感觉我还是掌握它比较好,如果是一年前,这本书我可能也看不下去,因为那个时候的我还没养成看书的习惯,一开始学知识都是去百度搜,去看博客等,而且很少主动的学习,更别提去看书了,慢慢的就发现这种碎片式的知识学习方式并没有彻底解决技能掌握度低的问题,而且知识点太碎了,无法连贯起来形成自己的知识系统,技能栈不全面,所以从去年开始,开始主动买技术书籍以及技能相关的书籍来看,也慢慢的由一点也看不下去,到强迫自己看一点,再到每天能看几页,最后能坚持看完一本,接着是第二本、第三本....
因为想看书了,而且也慢慢的养成了看书的习惯了,因此啃完这本书也就很轻松了,后来因为整理书中的源码又看了一遍,就算是加深印象了吧。
结语
这篇文章主要是讲一下自己的体会,其实都是一些牢骚话,关键的是书中的源码,因为网上确实没有这本书的相关文档,因此就自己整理了一下,如果有同样在看这本书的朋友,不太想自己一点点敲书上的代码的话,可以直接到我的github仓库中去下载代码。
其实我就是不想敲代码,哈哈哈哈,去网络上搜了一圈之后,发现根本没有现成的,只能自己敲了,既然整理好了一部分代码,索性就上传到GitHub上,让大家都看一看,节省一下其他人的时间,GitHub地址在这里,无法访问的话,也可以到码云的仓库中看,地址是点这里,给项目个star吧。
推荐一下自己的达人课,感兴趣的朋友可以看一下:SSM搭建精美实用的管理系统

《实战java高并发程序设计》源码整理及读书笔记的更多相关文章
- 《实战Java高并发程序设计》读书笔记
文章目录 第二章 Java并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2. ...
- 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...
- 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...
- 【实战Java高并发程序设计 5】让普通变量也享受原子操作
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...
- 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray
除了提供基本数据类型外,JDK还为我们准备了数组等复合结构.当前可用的原子数组有:AtomicIntegerArray.AtomicLongArray和AtomicReferenceArray,分别表 ...
- 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference AtomicReference无法解决上述问题的根 ...
- 【实战Java高并发程序设计 1】Java中的指针:Unsafe类
是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...
- 《实战Java高并发程序设计》读书笔记三
第三章 JDK并发包 1.同步控制 重入锁:重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,这种锁可以反复使用所以叫重入锁. 重入锁和synchro ...
- 《实战Java高并发程序设计》读书笔记六
第六章 Java 8 与并发 1.函数式编程 函数作为一等公民: 将函数作为参数传递给另外一个函数这是函数式编程的特性之一. 函数可以作为另外一个函数的返回值,也是函数式编程的重要特点. 无副作用: ...
随机推荐
- 深入Web请求过程
B/S网络架构 带来的好处: 1.客户端使用同一的浏览器. --浏览器的交互特性使其使用起来非常简便 2.服务器基于统一的http. --简化.规范开发模式,大大节省开发成本.如tomcat ngi ...
- Azure IoT 技术研究系列1-入门篇
物联网技术已经火了很多年了,业界各大厂商都有各自成熟的解决方案.我们公司主要搞新能源汽车充电,充电桩就是我们物联网技术的最大应用,车联网.物联网. 互联网三网合一.作为Azure重要的Partner和 ...
- JavaWeb开发之Servlet
1. Servlet有关概念和前置知识 1.1 什么是动态网页 如果浏览器在不同时刻或不同条件下访问web服务器上的某个页面,浏览器所获得的页面内容可以发生变化,那么这个页面就称之为动态页面. 动态网 ...
- Redis技术分享
环境介绍: 开发环境: spring3+tomcat7+maven3+redis-3.0.7 运行环境: Linux 前言: 项目中引入redis背景: 项目中最初将科目.打印.利润表.资产负债表.现 ...
- Javascript数组与基本函数
数组定义方法: 1. var arr=new Array(); var arr=Array(); 2. var arr1=Array('a','b','c'); 3. var arr2=['a','b ...
- Linux--谈父子进程执行过程
fork函数用于从已存在进程中创建一个新进程,新进程成为子进程,原进程成为父进程.这两个进程分别返回他们各自的返回值, 其中父进程的返回值是子进程的进程号,子进程则返回0,因此返回值大于0标识父进程, ...
- centos7安装redis3.0和phpredis扩展详细教程(图文)
整理一下centos7安装redis3.0和phpredis扩展的过程,有需要的朋友可以拿去使用. 一.安装redis3.0 1.安装必要的包 yum install gcc 2.centos7安装r ...
- http接口加密《一》:移动应用中,通过在客户端对访问的url进行加密处理来保护服务器上的数据
来源:http://meiyitianabc.blog.163.com/blog/static/10502212720131056273619/ 我认为,保护服务器端的数据,有这么几个关键点: 不能对 ...
- C++模板学习:函数模板、结构体模板、类模板
C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(i ...
- ASP.NET Core:部署项目到Ubuntu Server
概述 基于上一篇成功安装Ubuntu Server 16.10的基础上,接下来继续我们ASP.NET Core项目的部署之旅! 只是对于这些年整天和Windows打交道的我,初次使用Linux确实有点 ...