点击一级类目即可跳转对应的链接
3.1.2. Notify(),notifyAll():唤醒同步锁上处于等待状态的线程 9
3.2.1. sleep():使当前线程休眠,但不释放锁 9
3.2.3. currentThread():获得当前线程 9
T.interrupt():设置当前线程为可中断线程。可中断t.lockInterruptibly()方式加锁并且处于等待获取锁状态的线程。但对于运行中的线程不可中断。 10
3.3.8.1. T.interrupt()和T.isInterrupted()协作来中断线程 10
3.3.8.2. sleep,wait,join中的线程被设置为可中断线程时抛出异常 10
4.4.3. 其他阻塞:sleep() , join() , 发出了I/O请求 11
5.2.1. 读-写共享变量:while条件中的共享变量用于线程之间的通讯 14
5.2.2. 等待通知机制:通过wait() notify()机制唤醒对应的线程 14
5.3.1. 主内存和工作内存数据不一致:JMM模型导致的 14
5.4. 线程安全的处理方案:CAS,volative,synchronized,lock 14
8. DCL double-check locks(指令重排序导致的非线程安全问题) 16
8.2. 单例模式2:synchronized修改方法块 16
8.4. 最终版:单例模式4:volatile变量禁止指令重排序,让DCL生效 16
9. Volatile-CAS-synchronized-lock对比 17
10.2. 使用注意事项:区分锁对象(锁不同没有互斥作用) 18
10.4. synchronized的happens-before关系:先加锁后释放锁 18
11. volatile:synchronized的轻量级实现 19
11.1. 作用:保证数据的可见性,以及确保变量不会被重排序 19
11.2.1. 和Synchronized结合,用于对变量n读多写少的情况 19
11.2.2. 和CAS结合保证操作的原子性,如AtomicInteger 19
13. AtomicInteger中CAS-volatile的应用 21
13.3. 核心方法compareAndSet(int expect, int update) 21
13.4. Get/set/getAndIncrement等方法 21
15.2. Object.wait()/notify() 23
15.3. LockSupport.park()/unpark() 23
15.4. lock.lock()/unlock() condition.await()/asignal() 24
16.1.1. final long parkBlockerOffset 线程中parkBlocker属性的偏移量 26
16.1.3. unpark(t):调用unsafe的方法,唤醒线程t 26
16.1.4. park(Object blocker):阻塞当前线程到对象blocker 26
16.1.5. getBlocker/setBlocker: 设置线程的阻塞者对象 26
18.1. volatile Object parkBlocker 属性 27
20.1. 锁持有者管理器AbstractOwnableSynchronizer 29
20.2. 作用:在独占模式下,用于设置当前同步对象的占用线程。 29
20.3. 为什么需要将AQS持有锁的线程的标识向上抽取 29
21.5.1. volatile int state 相关:unsafe使用CAS协议实现 31
21.5.2. transient volatile Node head; 31
21.5.3. transient volatile Node tail; 31
21.5.5. isHeldExclusively() 32
21.9. 头节点,尾节点设置,waitStatus的更新 33
21.12. AQS.acquire----AQS.release流程运转 35
23.3.1. 构造器new Semaphore(2, boolean fair); 37
24.4. ConcurrentHashMap 线程安全研究 40
26. java.util.concurrent.locks包分析 42
26.2.2. 发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象 42
26.5. ReentrantReadWriteLock案例分析 43
26.6. ReentrantLock 可重入的互斥锁 44
29.5. ExecutorService 线程池接口 49
29.5.2. execute() submit()的区别 49
29.6. ScheduledExecutorService 定时调度接口 50
29.7. ThreadPoolExecutor 线程池类 50
29.8.1. 单线程的线程池newSingleThreadExecutor(...) 51
29.8.2. 创建固定大小的线程池 newFixedThreadPool(...) 51
29.8.3. 可根据需要创建新线程的线程池 newCachedThreadPool(...) 51
29.8.4. 大小不限的定时调度的线程池 newScheduledThreadPool(...) 51
29.8.5. 单线程的定时调度的线程池newSingleThreadScheduledExecutor() 51
29.9.2.1. shutdown():平缓的关闭线程池。 51
29.9.2.2. shutdownNow():立即关闭线程池。 51
30.4.1.1. boolean cancel(boolean t) 尝试取消正在运行的任务 53
30.4.1.2. boolean isCancelled() 判断任务是否是在完成前被取消 53
30.4.1.3. boolean isDone() 判断任务是否已完成(含异常/取消而完成) 53
30.4.1.5. V get(long timeout,TimeUnit unit) 等待时间内获取异步执行结果 53
30.6.1.1. FutureTask(Callable<V> callable) 53
30.6.1.2. FutureTask(Runnable runnable, V result) 53
30.6.1.3. 由于FutureTask实现了Runnable接口,可start()方式启动线程 54
30.7.1. 线程池中submit() ,execute()方式启动的线程 54
30.7.2. 通过new FutureTask(Callable/Runnable)方式获取的Runnable实例,可start()方式启动 54
31.2.2. get(): 获取ThreadLocal中当前线程共享变量的值。 54
31.2.3. set(t): 设置ThreadLocal中当前线程共享变量的值。 55
31.2.4. remove(): 移除ThreadLocal中当前线程共享变量的值。 55
31.2.5.1. private Entry[] table; 55
31.2.5.2. private int size = 0; 55
31.2.5.3. static class Entry extends WeakReference<ThreadLocal> { 55