01. 开篇词 | 你为什么需要学习并发编程?.html 02. 学习攻略 | 如何才能学好并发编程?.html 03. 01 | 可见性、原子性和有序性问题:并发编程Bug的源头.html 04. 02 | Java内存模型:看Java如何解决可见性和有序性问题.html 05. 03 | 互斥锁(上):解决原子性问题.html 06. 04 | 互斥锁(下):如何用一把锁保护多个资源?.html 07. 05 | 一不小心就死锁了,怎么办?.html 08. 06 | 用“等待-通知”机制优化循环等待.html 09. 07 | 安全性、活跃性以及性能问题.html 10. 08 | 管程:并发编程的万能钥匙.html 11. 09 | Java线程(上):Java线程的生命周期.html 12. 10 | Java线程(中):创建多少线程才是合适的?.html 13. 11 | Java线程(下):为什么局部变量是线程安全的?.html 14. 12 | 如何用面向对象思想写好并发程序?.html 15. 13 | 理论基础模块热点问题答疑.html 16. 14 | Lock和Condition(上):隐藏在并发包中的管程.html 17. 15 | Lock和Condition(下):Dubbo如何用管程实现异步转同步?.html 18. 16 | Semaphore:如何快速实现一个限流器?.html 19. 17 | ReadWriteLock:如何快速实现一个完备的缓存?.html 20. 18 | StampedLock:有没有比读写锁更快的锁?.html 21. 19 | CountDownLatch和CyclicBarrier:如何让多线程步调一致?.html 22. 20 | 并发容器:都有哪些“坑”需要我们填?.html 23. 21 | 原子类:无锁工具类的典范.html 24. 22 | Executor与线程池:如何创建正确的线程池?.html 25. 23 | Future:如何用多线程实现最优的“烧水泡茶”程序?.html 26. 24 | CompletableFuture:异步编程没那么难.html 27. 25 | CompletionService:如何批量执行异步任务?.html 28. 26 | Fork Join:单机版的MapReduce.html 29. 27 | 并发工具类模块热点问题答疑.html 30. 28 | Immutability模式:如何利用不变性解决并发问题?.html 31. 29 | Copy-on-Write模式:不是延时策略的COW.html 32. 30 | 线程本地存储模式:没有共享,就没有伤害.html 33. 31 | Guarded Suspension模式:等待唤醒机制的规范实现.html 34. 32 | Balking模式:再谈线程安全的单例模式.html 35. 33 | Thread-Per-Message模式:最简单实用的分工方法.html 36. 34 | Worker Thread模式:如何避免重复创建线程?.html 37. 35 | 两阶段终止模式:如何优雅地终止线程?.html 38. 36 | 生产者-消费者模式:用流水线思想提高效率.html 39. 37 | 设计模式模块热点问题答疑.html 40. 38 | 案例分析(一):高性能限流器Guava RateLimiter.html 41. 39 | 案例分析(二):高性能网络应用框架Netty.html 42. 40 | 案例分析(三):高性能队列Disruptor.html 43. 41 | 案例分析(四):高性能数据库连接池HiKariCP.html 44. 42 | Actor模型:面向对象原生的并发模型.html 45. 43 | 软件事务内存:借鉴数据库的并发经验.html 46. 44 | 协程:更轻量级的线程.html 47. 45 | CSP模型:Golang的主力队员.html 48. 结束语 | 十年之后,初心依旧.html 49. 结课测试 | 这些Java并发编程实战的知识你都掌握了吗?.html 50. 用户来信 | 真好,面试考到这些并发编程,我都答对了!.html 51. 3 个用户来信 | 打开一个新的并发世界.html