可见性是基于缓存的刷新,并不是指令执行中值的刷新
可以给指定的对象加锁获取对象的监视器。
可以给方法加锁,该实例执行该方法需要获取该实例的锁。
可以给类加锁,在使用该类时都需要加锁
各种线程池的实现,底层都是依赖ThreadPoolExecutor类,通过依赖不同的构造入参实现不同特性的线程池。
参数有,核心线程数、最大线程数、非核心线程数空闲存活时间、任务队列、线程工厂、线程池拒绝任务的策略。
线程池的基本工作流程:首先提交任务,根据线程池的内部状况进行任务安排,主要分为三步核心
1.核心线程有空闲则增加worker
2.将任务尝试增加到队列里
3.创建非核心线程,该线程数区间是max-core。同时存活时间也是这对该类型线程
利用一个AtomicInteger 存储了runState 和workCount 高三位存储状态、后29位存储数量,利用掩码取值