ThreadLocal是一个本地线程副本变量工具类,在每个线程中都创建了一个ThreadLocalMap对象,简单说ThreadLocal就是一种以空间换时间的做法,每个线程可以访问自己内部ThreadLocalMap对象内的 value。通过这种方式,避免资源在多线程间共享。
表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主内存中;读 volatile 变量时,JMM 会把线程对应的本地内存设置为无效,直接从主内存中读取共享变量 3.
线程池管理器:用于创建线程池,销毁线程池,添加新任务。工作线程:线程池中线程,可循环执行任务,在没有任务时处于等待状态。任务队列:用于存放没有处理的任务,一种缓存机制。任务接口:每个任务必须实现的接口,供工作线程调度任务的执行,主要规定了任务的开始和收尾工作,和任务的状态。
- 必须发生指定数量的事件后才可以继续运行(比如赛跑比赛,裁判喊出3,2,1之后大家才同时跑) - CountDownLatch(int count):必须发生count个数量才可以打开锁存器 - await:等待锁存器 - countDown:触发事件
ReentrantReadWriteLock可以看成是组合式,因为ReentrantReadWriteLock也就是读写锁允许多个线程同时对某一资源进行读。不同的自定义同步器争用共享资源的方式也不同。自定义同步器在实现时只需要实现共享资源state的获取与释放方式即可