Java 8
集合
红黑树
漫画:什么是红黑树?
硬核图解面试最怕的红黑树【建议反复摩擦】_敖 丙的博客
map
HashMap实现原理和源码分析_AItsuki的博客
LinkedHashMap(JDK1.8)源码解析_ThinkWon的博客
集合的modCount字段和Fail-Fast,Fail-Safe机制解释_AItsuki的博客
System.arraycopy()和Arrays.copyOf()到底是浅拷贝还是深拷贝
IO
多线程
竞态条件: 程序执行结果受线程执行顺序影响
线程
守护线程
(88条消息) Java 守护线程_ZhSuZhan的博客-CSDN博客_java 守护线程
同步机制
内置锁、同步队列
volatile
synchronized
object 内置条件队列
显式锁、条件队列
ReentrantLock详解 与内置锁相对应
深入剖析ReentrantLock实现原理 - 知乎 (zhihu.com)
ReentrantReadWriteLock
ReentrantLock.newCondition() 内置条件队列,与object相对应
工具类
ThreadLocal,一篇文章就够了 - 知乎 (zhihu.com)
闭锁 CountDownLatch
计数信号量 semaphore
栅栏
CyclicBarrier
类似于闭锁,开放后重置
final域 保证初始化安全性
类内静态对象,初始化
同步容器类
vector
hashtable
内部方法都加了内置锁,效率低
并发容器类
ConcurrentHashMap详解
使用细粒度分段锁,效率高,但size等方法的返回值只是估计值。
copyonwriteArraylist
CopyOnWriteArraySet
Java CopyOnWriteArrayList、set详解 - 简书 (jianshu.com)
任务执行
thread
runnnable
未来任务
futuretask
calllable 可以抛出异常
线程状态
线程停止
interrupt 协作机制
stop
执行完成
线程池
-
Executor:作为线程池的最顶层接口,Executor的接口在设计上,实现了任务提交与任务执行之间的解耦,这是它存在的意义。在Executor中,只定义了一个方法void execute(Runnable command),用于执行提交的可运行的任务。注意,你看它这个方法的参数干脆就叫command,也就是“命令”,意在表明所提交的不是一个静止的对象,而是可运行的命令。并且,这个命令将在未来的某一时刻执行,具体由哪个线程来执行也是不确定的;
-
ExecutorService:继承了Executor的接口,并在此基础上提供可以管理服务和执行结果(Futrue) 的能力。ExecutorService所提供的submit方法可以返回任务的执行结果,而shutdown方法则可以用于关闭服务。相比起来,Executor只具备单一的执行能力,而ExecutorService则不仅具有执行能力,还提供了简单的服务管理能力;
-
AbstractExecutorService:作为ExecutorService的简单实现,该类通过RunnableFuture和newTaskFor实现了submit、invokeAny和invokeAll等方法;
-
ThreadPoolExecutor:该类是线程池的最终实现类,实现了Executor和ExecutorService中定义的能力,并丰富了AbstractExecutorService中的实现。在ThreadPoolExecutor中,定义了任务管理策略和线程池管理能力,相关能力的实现细节将是我们下文所要讲解的核心所在。
executors 提供默认线程池
聊聊线程池设计与原理,由表及里趣味解析
线程池、饱和策略详解
ThreadFactory 线程池内置线程工厂
不配置统一用Executors的默认线程工厂
DefaultThreadFactory
线程池任务队列
饱和策略
RejectedExecutionHandler 子类
Java线程池--饱和策略(拒绝策略)
线程池的状态与生命周期管理
前文说过,线程池恰似一个生产车间,而从生产车间的角度看,生产车间有运行、停产等不同状态,所以线程池也是有一定的状态和使用周期的。
- Running:运行中,该状态下可以继续向线程池中增加任务,并正常处理队列中的任务;
- Shutdown:关闭中,该状态下线程池不会立即停止,但不能继续向线程池中增加任务,直到任务执行结束;
- Stop:停止,该状态下将不再接收新的任务,同时不再处理队列中的任务,并中断工作中的线程;
- Tidying:相对短暂的中间状态,所有任务都已经结束,并且所有的工作线程都不再存在(workerCount==0),并运行terminated()钩子方法;
- Terminated:terminated()运行结束。
作者:让我来搞这个bug
链接:www.jianshu.com/p/ce0770001…
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
AQS
Java 并发高频面试题:聊聊你对 AQS 的理解?_敖 丙的博客