一年前由于工作需要从微软技术栈入坑Java,并陆陆续续做了一个Java后台项目,目前在搞Scala+Java混合的后台开发,一直觉得并发编程是所有后台工程师的基本功,所以也学习了小一年Java的并发工具,对整体的并发理解乃至分布式都有一定的提高,所以想和大家分享一下。
我的学习路线
首先说说学习路线,我一开始是直接上手JCIP(Java Concurrency in Practice),发现不是很好懂,把握不了那本书的主线,所以思索着从国内的作者开始先,所以便读了下方腾飞的《Java并发编程的艺术》的,虽然豆瓣上的评价一般,但是对于构建Java并发的整体映像还是有所提高的,至少我知道了有哪些东西要深入学习。接着我想加强下并发的理论,继续读了The Art of Multiprocessor Programming,这本书比较艰涩,不是很好懂,但是过一遍还是好处多多,建议初学者了解下概念的过过,后期可以再来翻看。有了以上两步的支持,接下来就又开始啃JCIP了,发现比以前有了不同的感觉,我能比较轻松的跟上书的脉络,知道书的整体框架,读起来不那么费劲了,这本书号称Java并发编程的圣经,确实可以看出作者有很丰富的并发实践经验。再后来我过了一遍Oracle官网上的Java Tutorial关于并发的那一章,发现讲的也不错,对于了解基础库有哪些组件帮助挺大。
到了这一步,接下来怎么继续提高呢?我发现了一本很有趣的书,《七周七并发模型》,之前的视野一直是在Java并发编程的工具包中深入了解,感觉,应该跳出来,从模型的角度看看各个语言的并发实现的原理,我目前正处于这一步,发现很有意思,第一章讲Java的线程和锁这个模型就感觉很精髓,只用了小三章把Java整体的脉络过了一遍,强烈推荐用来复习。
下一步我的计划是jdk的concurrent包以及Java specification的并发部分,并发理解,除了基础概念,就是要深刻领会各个应用场景下,有无并发问题以及如何写出线程安全的代码,个人觉得学习下无锁的实现对理解有一定的帮助,但不用太费心思,到了Java Memory Model这一层基本就够用了。
PS:如果大家在学习过程中遇到什么问题,或者缺乏相关的学习资料,可查看我的公告栏获取,有问题随问随答,还有我这段时间整理的一些Java学习手册,面试题,开发工具,PDF文档书籍教程,需要的话都可以免费分享给大家。言归正传:
根据上面的阐述,我的路线图可以总结如下:
学习心得 -- Java并发包的基础概念
了解Java并发包有哪些工具以及相关基础概念,有Java tutorial的concurrent章节和JCIP一书就足够了。
JCIP一书的整体脉络如下:
介绍多线程的利弊;
解释线程安全是什么以及如何获得线程安全;
从高频的使用场景出发,介绍对象传递,类的设计等如何获得线程安全;
从Java并发包出发,介绍高层的并发组件有啥以及相关原理;
介绍并发的一些弊端以及如何避免;
从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 .........