33、Thread、Per、Message模式:最简单实用的分工方法我们曾经把并发编程领域的问题总结为三个核心问题:分工、同步和互斥。其中,同步和互斥相关问题更多地源自微观,而分工问题则是源自宏观。我们解决问题,往往都是从宏观入手,在编程领域,软件的设计过程也是先从概要设计开始,而后才进行详细设计。同样,解决并发编程...2026-01-19Java并发编程实战
32、Balking模式:再谈线程安全的单例模式上一篇文章中,我们提到可以用“多线程版本的if”来理解Guarded Suspension模式,不同于单线程中的if,这个“多线程版本的if”是需要等待的,而且还很执着,必须要等到条件为真。但很显然这个世界,不是所有场景都需要这么执着,有时候我们还需...2026-01-19Java并发编程实战
31、Guarded Suspension模式:等待唤醒机制的规范实现前不久,同事小灰工作中遇到一个问题,他开发了一个Web项目:Web版的文件浏览器,通过它用户可以在浏览器里查看服务器上的目录和文件。这个项目依赖运维部门提供的文件浏览服务,而这个文件浏览服务只支持消息队列(MQ)方式接入。消息队列在互联网大厂中用的非...2026-01-19Java并发编程实战
30、线程本地存储模式:没有共享,就没有伤害民国年间某山东省主席参加某大学校庆演讲,在篮球场看到十来个人穿着裤衩抢一个球,观之实在不雅,于是怒斥学校的总务处长贪污,并且发话:“多买几个球,一人发一个,省得你争我抢!”小时候听到这个段子只是觉得好玩,今天再来看,却别有一番滋味。为什么呢?因为其间...2026-01-19Java并发编程实战
3 个用户来信、打开一个新的并发世界你好,我是王宝令。 很高兴能再次收到用户的来信,一下子还是 3 封,真是受宠若惊。 通过大家的来信、留言,我深刻感受到大家学习的欲望和热情,也很感谢你们能跟着我一起,把并发这么难啃的知识点都**“嚼碎了”——“吃下去”——“消化掉”**,变成自己的东...2026-01-19Java并发编程实战
29、Copy、on、Write模式:不是延时策略的COW在上一篇文章中我们讲到Java里String这个类在实现replace()方法的时候,并没有更改原字符串里面value[]数组的内容,而是创建了一个新字符串,这种方法在解决不可变对象的修改问题时经常用到。如果你深入地思考这个方法,你会发现它本质上是一...2026-01-19Java并发编程实战
28、Immutability模式:如何利用不变性解决并发问题我们曾经说过,“多个线程同时读写同一共享变量存在并发问题”,这里的必要条件之一是读写,如果只有读,而没有写,是没有并发问题的。 解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的...2026-01-19Java并发编程实战
27、并发工具类模块热点问题答疑前面我们用13篇文章的内容介绍了Java SDK提供的并发工具类,这些工具类都是久经考验的,所以学好用好它们对于解决并发问题非常重要。我们在介绍这些工具类的时候,重点介绍了这些工具类的产生背景、应用场景以及实现原理,目的就是让你在面对并发问题的时候,...2026-01-19Java并发编程实战
26、Fork、Join:单机版的MapReduce前面几篇文章我们介绍了线程池、Future、CompletableFuture和CompletionService,仔细观察你会发现这些工具类都是在帮助我们站在任务的视角来解决并发问题,而不是让我们纠缠在线程之间如何协作的细节上(比如线程之间如何实现...2026-01-19Java并发编程实战
25、CompletionService:如何批量执行异步任务在[《23 | Future:如何用多线程实现最优的“烧水泡茶”程序?》]的最后,我给你留了道思考题,如何优化一个询价应用的核心代码?如果采用“ThreadPoolExecutor+Future”的方案,你的优化结果很可能是下面示例代码这样:用三个线...2026-01-19Java并发编程实战