多线程大家在初学的时候,对这个知识点应该有不少的疑惑的。我认为主要原因有两个:
多线程在初学的时候不太好学,并且一般写项目的时候也很少用得上(至少在初学阶段时写的项目基本不需要自己创建线程)。
多线程的知识点在面试经常考,多线程所涉及的知识点非常多,难度也不低。
这就会给人带来一种感觉「这破玩意涉及的东西是真的广,平时也不怎么用,怎么面试就偏偏爱问这个鬼东西」
不多BB,我要开始了。
多线程知识重要吗?
我们日常「关于多线程的代码」写得不多,但是我们写的程序代码的的确确是在多线程的环境下跑的。
如果我们不懂多线程知识,很直接的一个现实:
从开头的思维导图里我们可以发现多线程的知识点还是很多的,我们起码得知道:
线程和进程的区别
Thead类的常见方法
可以用什么手段来解决线程安全性问题
Synchronized和Lock锁的区别
什么是AQS、ReentrantLock和ReentrantReadWriteLock锁
JDK自带的线程池有哪几个,线程池的构造方法重要的参数
什么是死锁,怎么避免死锁
CountDownLatch、CyclicBarrier、Semaphore是什么?
Atomic包下的常见子类,什么是CAS,CAS会有什么问题
ThreadLocal是什么?
…..//
虽然在工作中未必会全部用得上,但如果项目真的用到了,我们如果学过了可能就可以很快地理解当时为什么要这样设计(我觉得去挖掘过程还是挺有意思的)。
「我可能不用,但你必须要有」
这个道理也很容易懂:「我买电脑的时候,虽然我是木耳听不出什么音质出来,但你音质就是得好」。企业招人的时候也一样「你在工作的时候未必要写,但你必须要会」
至少在我看来,从求职的角度出发,多线程是很重要的。之前我还整理过在我当时校招经常被问到的多线程面试题目:
多线程了解多少啊?使用多线程会有什么问题?你是怎么理解“线程安全”的?
如果我现在想要某个操作等待线程结束之后才执行,有什么方法可以实现?为什么要用CountDownLatch?CountDownLatch的底层是什么?(引出AQS)
synchronized关键字来说一下,它的用途是什么?synchronized底层的原理是什么?
线程安全的容器有哪些?(着重于ConcurrentHashMap、CopyWriteOnArrayList与其他非线程安全容器的区别以及它们的具体实现)
ThreadLocal你了解过吗?主要是用来干什么的?具体的源码实现原理来说一下吧
产生死锁的条件是什么?我们可以如何避免死锁?(可延伸到操作系统层面上的死锁)
synchronized锁和ReentrantLock锁有什么区别呀?
线程池你应该也看过吧,来说说为什么要用线程池。JDK默认实现了几个线程池,分别有xxx(自然地ThreadPoolExecutor构造函数的常用几个参数你也得一起说出来)
…
转发+关注,然后私信回复关键字 “笔记” 即可获得《Java多线程知识点总结》PDF文档资料的免费领取方式!
一、什么是多线程
初识多线程
1.1介绍进程
1.2回到线程
1.3进程与线程
1.4并行与并发
1.5Java实现多线程
1.6Java实现多线程需要注意的细节
二、Thread类解析
Thread线程类API
1.2守护线程
1.3优先级线程
1.4线程生命周期
三、使用多线程需要注意的问题
1、使用多线程遇到的问题
2、对象的发布与逸出
3、解决多线程遇到的问题
4、多线程需要注意的事 -总结
四、synchronized锁和lock锁
1、synchronized锁
2、Lock显式锁
3、Java锁简单总结
五、AQS
1、AQS是什么?
2、简单看看AQS
六、ReentrantLock和ReentrantReadWriteLock
1、ReentrantLock锁
2、ReentrantReadWriteLock
3、最后
七、线程池
1、线程池简介
2、JDK提供的线程池API
3、ThreadPoolExecutor详解
4、execute执行方法
5、线程池关闭
八、死锁
1、死锁讲解
2、避免死锁的方法
3、死锁总结
九、线程常用的工具类
1、CountDownLatch
2、CyclicBarrier
3、Semaphore
4、总结
十、Atomic
1、基础铺垫
2、原子变量类简单介绍
十一、ThreadLocal
1、什么是ThreadLocal
2、为什么要学习ThreadLocal?
3、ThreadLocal实现的原理
4、避免内存泄露
5、总结
放干货
PDF的内容非常非常长,干货非常非常的硬,有兴趣的读者可以浏览一波。共有「129」页
转发+关注,然后私信回复关键字 “笔记” 即可获得《Java多线程知识点总结》PDF文档资料的免费领取方式!
网友评论