-
线程不安全示例:Test
-
单例问题示例:Singleton
- happen before 1,2,3,4条示例:Test
- synchronized
-
锁住不相干多个资源示例:Account1
-
锁住相干多个资源错误示例:Account2
-
锁住相干多个资源正确示例:Account3(通过传入锁对象)
-
锁住相干多个资源正确示例:Account4(使用Account.class作为锁对象)
-
通过同时锁住转入和转出账号控制锁粒度解决锁住多个资源时的性能问题示例:Account1(会引入死锁问题)
-
通过破坏“破坏占用且等待条件”解决死锁问题(使用Allocator来同时申请转入和转出账号实现)示例:Account2
-
通过“破坏循环等待条件”解决死锁问题(引入排序id实现)示例:Account3
- 将5中Account2解决死锁的方式换成wait,notify实现,避免使用while一直去发送申请
-
wait被唤醒后获取不到锁示例:DemoWait
-
join 实现原理示例:MyThread,Test
-
通过wait,notify,synchronizatized实现简单的阻塞队列
-
java 中线程的状态,以及状态间的转换
-
线程中断示例:DemoInterrupted
-
synchronizatized是可重入锁示例:SynchronizatizedDemo
-
ReentrantLock是可重入锁示例:ReentrantLocDemo
-
使用 ReentrantLock 解决死锁问题示例:(可能会产生活锁)
-
ReentrantLock和Condition实现管乘支持多条件变量(Synchronizatized只支持单条件变量)
-
ReentrantLock和Condition实现缓冲区
-
代码化的信号量模型,示例:Semaphore1
-
信号量实现互斥,示例:Semaphore2
-
信号量实现限流器,示例:ObjPool,Connect,Test
-
什么是读写锁
-
实现一个缓存
-
实现缓存的按需加载
-
读写锁的升级与降级
-
StampedLock支持的三种锁模式
-
乐观读的正确使用方式及基本实现原理
-
StampedLock使用注意事项
-
CountDownLatch代码示例:Reconciliation3
-
CyclicBarrier代码示例:Reconciliation5
-
基于synchronized的同步容器
-
同步容器使用的注意事项
-
并发容器