前言
兄弟姐妹们,又是新的一周,很开心今天博客总阅读量超过400,看看今年能不能突破1000的阅读量,废话不多说,开始今天的内容。
最近看了几本书《Java并发编程的艺术》、《Java并发编程实战》,感觉学到了很多的东西,但是同时脑子糊糊的,很难把这些知识串联起来,我相信很多同学都是一样的感觉,今天特定缕了一缕思路,搞出了个思维导图,供大家学习交流思考。
同时推荐大佬的系列博客,链接。
看完这些博客之后,再去看看上面的书籍,我相信收获会很大的。
思维导图
按照惯例,放出一个自己写的思维导图,其实建议大家自己画一个,这些才能把这些知识给串联起来。
我们先从常见的面试题入手,啊什么是线程?啊线程间通信的方式?啊线程池中队列满了之后是如何处理的?啊为什么需要双重检查?等等我们发现感觉知识点都是毫无头绪的,其实都是有联系的。我们来看看上面的思维导图,分点说明。
- 线程基础
哦,这里不就是对于线程的基本理解吗。Java中Thread
相关的API。
还有线程间通信方式,如果是共享变量,那么我们可以用volatile
,如果是消息通知的话,我们可以使用Object
带有的wait()
和notify()
方式,当然还可以利用JUC并发包等。 - JMM
要深入理解Java多线程编程,我觉得首先深入理解JMM,也就是Java内存模型。这个我们可以通过i++的例子,或者是设计模式中的单例模式来串在一起。 - JUC
从JDK1.5开始,Java就提供了很多帮助多线程开发的工具类,包括我们常用的线程池、原子类等等。 - 锁
讲锁的话,我们从最古老的Java关键词synchronized
讲起,你不得知道这个关键词的用法?底层原理是怎么实现的?是用JVM底层指令实现的吗?那和用JUC并发包的Lock
有啥区别呢?那回到了JUC并发包的使用。
那同时,还有各种各样的锁,什么读写锁、什么公平锁、什么悲观乐观锁,是吧。 - 项目使用
上面讲了这么的东西,深入底层的JVM也讲了,那么我们实际项目该如何使用呢?
SpringBoot如何结合线程池使用呢?启动多线程的方式?
接下来从上面的思维导图慢慢更新博客,欢迎大家讨论!