背景:java知识比较宽泛,最好对每一类知识点进行分类总结,方便后面学习查看。该文主要用来总结多线程方面的知识点。
并发与并行的概念
并发性(concurrency)和并行性(parallel)是两个概念——
并行指在同一时刻,有多条指令在多个处理器上同时执行;
并发指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。
出自《疯狂java讲义》第16章 多线程
线程的状态转换
. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
. 阻塞(BLOCKED):表示线程阻塞于锁。
. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
. 终止(TERMINATED):表示该线程已经执行完毕。
ps:初始(new)、运行(runnable)、阻塞(blocked)、等待(waiting)、超时等待(timed_waiting)、终止(terminated)
CyC2018
https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Java%20%E5%B9%B6%E5%8F%91.md#sleep
sleep()和yield()方法的区别
什么情况下会抛出InterruptedException,为什么会抛出?
Java线程之 InterruptedException 异常
sleep()和wait()方法的最大区别是:
sleep()睡眠时,保持对象锁,仍然占有该锁;
而wait()睡眠时,释放对象锁。
但是wait()和sleep()都可以通过interrupt()方法打断线程的暂停状态,从而使线程立刻抛出InterruptedException(但不建议使用该方法)。
CAS与volatile
Java并发之AQS(AbstractQueuedSynchronizer)原理讲解
ps:其中有两个知识点,CAS原理和volatile原理讲解的很透彻。
CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
多线程interrupt()和线程终止方式
Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
线程池的使用和分析
ps:线程池的工作流程,如何合理配置线程池,线程池的监控
ps:线程池的基本用法 会手写
自己汇总