JAVA多线程设计模式篇 8、Thread-Per-Message 模式——来,这就是你的任务

java多线程Thread-per-Message模式详解 本篇文章给大家分享java多线程Thread-per-Message模式的相关知识点,对此有兴趣的朋友参考学习下。 立即下载

文章目录

并发编程领域的问题总结为三个核心问题:分工、同步和互斥。其中,同步和互斥相关问题更多地源自微观,而分工问题则是源自宏观。我们解决问题,往往都是从宏观入手,解决分工问题也有一系列的设计模式,比较常用的主要有 Thread-Per-Message 模式、Worker Thread 模式、生产者 - 消费者模式。比如写一个 HTTP 服务,如果在主线程中处理 HTTP 请求的话,那同一时间只能处理一个请求,太慢了!可以利用代办的思路,创建一个子线程,委托子线程去处理 HTTP 请求。这种委托他人办理的方式,在并发编程领域被总结为一种设计模式,叫做 Thread-Per-Message 模式,

final ServerSocketChannel ssc =   ServerSocketChannel.open().bind(new InetSocketAddress(8080));// 处理请求    
try {
  while (true) {
    // 接收请求
    SocketChannel sc = ssc.accept();
    // 每个请求都创建一个线程
    new Thread(()->{
      try {
        // 读 Socket
        ByteBuffer rb = ByteBuffer
          .allocateDirect(1024);
        sc.read(rb);
        // 模拟处理请求
        Thread.sleep(2000);
        // 写 Socket
        ByteBuffer wb = 
          (ByteBuffer)rb.flip();
        sc.write(wb);
        // 关闭 Socket
        sc.close();
      }catch(Exception e){
        throw new UncheckedIOException(e);
      }
    }).start();
  }
} finally {
  ssc.close();
}   

总结

并发编程领域的分工问题,指的是如何高效地拆解任务并分配给线程。
Thread-Per-Message 模式在java中用得不多,根本原因在于 Java 语言里的线程是一个重量级的对象,为每一个任务创建一个线程成本太高,尤其是在高并发领域,基本就不具备可行性。对于一些并发度没那么高的异步场景,例如定时任务,采用 Thread-Per-Message 模式是完全没有问题的。

多线程系列在github上有一个开源项目,主要是本系列博客的实验代码。

https://github.com/forestnlp/concurrentlab

如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。

您的支持是对我最大的鼓励。

数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案 数字IC后端实战项目案例之Innovus verify_drc DRC Violation脚本自动化修复方案 阅读详情

相关推荐

1.5元主控搞定高精度电流电压采集?STC8G1K08+INA180A3硬件设计全解析

本文详细解析了如何利用成本仅1.5元的STC8G1K08单片机与INA180A3电流检测放大器,构建一套高精度、低成本的电流电压采集系统。文章深入剖析了硬件设计精髓,包括利用MCU内部上拉电阻直驱数码管以节省成本、INA180A3的配置与计算,以及实现高频率采集并与上位机高速通信的软件策略,为嵌入式开发中的极致性价比设计提供了完整方案。

weixin_29166013的博客 600

多线程基础之设计模式Thread-Per-Message模式

多线程基础之设计模式Thread-Per-Message模式

m0_51681531的博客 546

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

Thread 所使用到的设计模式(一)

Thread所涉及的设计模式

heal_er6的博客 442

用于多种无人机协作的群体智能算法:综合综述

随着无人机技术的快速高水平发展,将多架无人机作为自主控制的编队应用于复杂情况是一个新兴领域的代表之一。在实现自主控制的挑战中,碰撞避免、任务分配、路径规划和编队重构是关键功能。本文对各种经典的无人机群智能算法进行了系统的总结和分析。

erjia_的博客 1万+

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 445

Thread-Per-Message

什么是Thread-Per-Message模式 Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。 这就好比电话接线员一样,收到的每一个电话投诉或者业务处理请求,都会提交对应的工单,然后交由对应的工作人员来处理。 每个任务一个线程: package MutilThreadModel.Thread...

Running-小猛的博客 312

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试

本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。

weixin_42522374的博客 458

【并发设计模式】聊聊Thread-Per-Message与Worker-Thread模式

【并发设计模式】聊聊Thread-Per-Message与Worker-Thread模式

芝兰生于深谷,不以无人而不芳 1743

使用机器学习算法预测黄金价格

在本文中,我们将使用线性回归、XGBoost和LSTM这三种不同的机器学习算法来预测黄金价格。接下来,我们使用线性回归、XGBoost和LSTM分别建立了模型,并进行了训练和预测。这些机器学习算法可以帮助我们对黄金价格进行预测,但请注意,市场价格受多种因素影响,因此预测结果可能并不完全准确。接下来,我们需要对数据进行一些预处理,以便用于机器学习模型的训练和测试。我们将使用80%的数据作为训练集,20%的数据作为测试集。最后,我们将绘制每个模型的预测结果,并将其与实际价格进行比较,以评估模型的性能。

QromMatlab的博客 1316

Codex 100个真实案例 - 用AI画业务流程图Mermaid(产品经理都馋哭了)

还在用 Visio、ProcessOn 拖拖拽拽画流程图?改一个箭头方向就要调半天?本案例教你用 Codex 自然语言描述业务流程,AI 自动转为 Mermaid 代码,一秒生成专业流程图、时序图、甘特图、饼图!还能搭建在线渲染工具、批量导出 PNG/SVG、集成到文档系统。产品经理、架构师、项目经理都能用,从此画图再也不是体力活!

yueyeguzhuo的专栏 351

3-多任务(进程、线程)

一、多任务的介绍 多任务指同一时间执行多个任务或程序 多任务执行的最大好处就是充分利用CPU资源,提高程序的执行效率。 两种表现形式: 并发:在一段时间内交替地执行多个任务(当任务数量大于CPU核数时) 并行:在一段时间内同时执行多个任务(当任务数量小于或等于CPU核数时) 二、进程的介绍和使用 概念:进程是系统分配资源的最小单位,一个正在运行的程序就是一个进程 1、多进程完成多任务 ​ 多进程是完成多任务的方式之一,程序运行时会默认创建一个进程,该进程为主进程,在程序运行后创建的进程为子进

lzq812的博客 357

文末含资料链接和视频讲解!YOLOv8集成CoordAtt注意力机制详细教程

本文详细介绍了如何在YOLOv8目标检测框架中集成CoordAtt注意力机制。首先解析了CoordAtt的工作原理,它通过分解式池化将位置信息嵌入到通道注意力中,相比传统注意力机制具有更好的空间信息保持能力。然后提供了PyTorch实现代码解析,包括自适应平均池化、Hard-Swish激活函数等关键实现细节。最后概述了YOLOv8架构,为后续集成CoordAtt提供基础。该教程适合具备深度学习基础的开发者,将理论与实践结合,帮助读者掌握这一目标检测优化技术。

FJN110的博客 266

图解多线程设计模式pdf_图解Java多线程设计模式 PDF 全书扫描版

序章1 Java线程 1I1.1 Java线程 2I1.2 何谓线程 2明为跟踪处理流程,实为跟踪线程 2单线程程序 3多线程程序 4Thread类的run方法和start方法 5I1.3 线程的启动 9线程的启动(1)——利用Thread类的子类 9线程的启动(2)——利用Runnable接口 10I1.4 线程的暂停 12I1.5 线程的互斥处理 13synchronized方法 14sync...

weixin_30839665的博客 1426

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Thread-Per-Message设计模式

Thread-Per-Message是为每一个消息的处理开辟一个线程,以并发方式处理,提高系统整体的吞吐量。这种模式再日常开发中非常常见,为了避免线程的频繁创建和销毁,可以使用线程池来代替。

seacean2000的专栏 483

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

谁能想到Java多线程设计模式竟然能被图解,大佬就是大佬,太牛了

有需要获取完整版资料的伙伴,点击文末下方传送门,即可获得免费领取方式!!

知识分享官 688

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java优化并发编程,这个设计模式一绝!

平时,如果需要传递或隔离一些线程变量时,我们可以考虑使用上下文设计模式。在数据库读写分离的业务场景中,则经常会用到ThreadLocal实现动态切换数据源操作。但在使用ThreadLocal时,我们需要注意内存泄漏问题,在之前的讲解,我们已经讨论过这个问题了。当主线程处理每次请求都非常耗时时,就可能出现阻塞问题,这时候我们可以考虑将主线程业务分工到新的业务线程中,从而提高系统的并行处理能力。

m0_45902146的博客 228

已跪,大佬通过图文就把Java多线程设计模式剖析透彻了

寒武纪时期之前,所有的生物都没有进化出眼睛,突然有一天,许多生物们都开始有了视觉。能看见多姿多彩的世界,周围的环境、敌人和猎物。于是生物的适应性提高了,智能不断发展,进化开始了。 "看见"很重要。因为看见周围的场景,就对当下场景的分类,为下一步的处理方式提供了基础。 多线程设计模式 通过 场景 + 处理方式 提供了前人总结的解决方案 。我们以后在看见对应场景时,心里有数。

老男孩的架构路 181

膜拜!国际程序设计师,用图、文、码就解剖了Java多线程设计模式

提起多线程编程,恐怕许多开发人员都会摇头表示不懂。确实,在校生和刚就职的开发人员往往很少有机会能够实践多线程编程。多数情况下,他们都是在开发框架下编写单线程的业务代码,而多线程的部分则被封装在了框架内部。即使是经验丰富的开发人员也会感叹他们曾经在多线程上栽过的跟头。但不可否认的是,多线程的确是一把利器,活用多线程有助于提高程序的响应性和吞吐量。可以毫不夸张地说,多线程是开发人员在继续“升级”的过程中必须打倒的一只“怪物”。

老男孩的架构路 543

一目了然!谁能想到Java多线程设计模式竟然被图解,看完不服不行

多线程设计模式在Java编程中起着至关重要的作用,它能够有效提高程序的执行效率,使得程序在处理大量数据和复杂任务时更加高效。这种直观的图解方式将大大降低初学者的学习难度,使得即便是对于抽象概念不够熟悉的读者,也能够迅速领会多线程设计模式的精髓。我们相信,读者在学完本书后,将能够更加自信地应对复杂的多线程编程场景,提高代码的可维护性和可扩展性。最后,让我们一同迎接Java多线程设计模式的挑战,通过图解的方式让这一看似复杂的领域变得一目了然。将采用模式语言的形式归纳本篇所介绍的12种模式之间的关系。

m0_63437643的博客 754

Java多线程模式

介绍以下多线程模式,这里主要是列举Java有哪些线程模式以及其主要的使用方式。详情可阅读《Java多线程模式》一书。   1、Single Thread Execution——能通过这座桥的,只有一个人 该模式用锁来保护关键的执行区域。   2,Immutable ——不可破坏的 Immutable类是指实例化之后状态不再改变的类。 该模式可以在以下情况下考虑使用:确认类的实例状态不

Roy的IT笔记 833

理解多线程设计模式

多线程设计模式:1.Single Threaded Execution Pattern[同一时刻只允许一个线程操作] 比喻:三个挑水的和尚,只能同一时间一个人过桥,不然都掉河里喂鱼了。 总结:在多个线程同时要访问的方法上加上synchronized关键字。 2.Immutable Pattern[变量赋值一次后只能读取,不能改变。] 比喻:一夫...

diaoju3333的博客 116

java多线程12种设计模式

1、Single Threaded Execution Pattern(单线程执行模式)

堆码时刻 4265

java多线程12设计模式

1、Single Threaded Execution Pattern(单线程运行模式) 2、Immutable Pattern(一成不变的模式) 3、Guarded Suspension Pattern(国防暂停模式) 4、Balking Pattern(止步模式,阻行模式) 5、Producer-Consumer Pattern(生产者-消费者模式) 6、Read-...

aofan9566的博客 149

图解Java多线程设计模式

从“操作中”变为“终止处理中”是线程终止的第一阶段。Active 是“主动的”的意思,因此 Active Object 就是“主动对象”的意思。所谓“主动的”, 一般指“有自己特有的线程”。Specific是“特定的”的意思,Storage是储存柜、存储装置的意思。因此,所谓ThreadSpecific Storage 就是“每个线程特有的存储柜”“为每个线程准备的存储空间”的意思。Producer是生产者的意思,指的是生成数据的线程。Consumer则是"消费者"的意思,指的是使用数据的线程。

wcg_jishuo的专栏 1346

Java多线程设计模式-学习笔记-Thread Per Message模式.

1. 模式描述:     每个消息/命令/请求分配一个线程, 有这个线程执行工作.     使用该模式的时候"委托消息的端"与"执行消息的一端"会是不同的线程. 2. 模式参与者:         2.1 Client(委托人)参与者:          client参与者会对Host参与者发出请求(request). client参与者并不知道          Host参与者会如何实现

renxin777 1738
上一篇: JAVA多线程设计模式篇 7、Read-Write Lock 模式——霸气侧漏的写,唯唯诺诺的读
下一篇: JAVA多线程设计模式篇 9、Woker Thread 模式——闲时摸鱼、忙时干活
悟空学编程
博客等级 码龄12年 32粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值