设计模式之多线程分工模式--- Thread-Per-Message模式

系列文章目录

设计模式之避免共享的设计模式Immutability(不变性)模式
设计模式之并发特定场景下的设计模式 Two-phase Termination(两阶段终止)模式
设计模式之避免共享的设计模式Copy-on-Write模式
设计模式之避免共享的设计模式 Thread-Specific Storage 模式
设计模式之多线程版本的if------Guarded Suspension模式
设计模式之多线程版本的if------Balking模式



前言

Thread-Per-Message 模式需要注意线程的创建,销毁以及是否会导致OOM。


简介

  • Thread-Per-Message 模式—简单实用的分工方法
  • Thread-Per-Message 模式就是为每个任务分配一个独立的线程,这是一种最简单的分工方法。
  • Thread-Per-Message 模式作为一种最简单的分工方案,Java 中使用会存在性能缺陷。在Java中的线程是一个重量级的对象,创建成本很高,第一点创建线程比较耗时,第二点线程占用的内存也比大。所以为每个请求创建一个新的线程并不适合高并发场景。为了解决这个缺点,Java并发包里提供了线程池等工具类。
  • 在其他编程语言里,例如 Go 语言,基于轻量级线程实现 Thread-Per-Message 模式就完全没有问题。
  • 对于一些并发度没那么高的异步场景,例如定时任务,采用 Thread-Per-Message 模式是完全没有问题的。

应用场景

在Java中的线程是一个重量级的对象,创建成本很高,第一点创建线程比较耗时,第二点线程占用的内存也比大。所以为每个请求创建一个新的线程并不适合高并发场景

/**
 * @author yang
 * @version 1.0.0
 */
public class ThreadPerMessageExample {
   
    public static void main(String[] args) {
   
        TaskHandler taskHandler = new TaskHandler();
        for (int i = 0; i < 5; i++) {
   
            String task = "任务" + i;
            taskHandler.handleTask(task);
        }
    }
    static class TaskHandler {
   
        public void handleTask(String task) {
   
            Thread thread = new Thread(() -> {
   
                System.out.println("处理" + task + " 在线程" + Thread.currentThread().getName());
            });
            thread.start();
        }
    }
}

Thread-Per-Message 模式的一个最经典的应用场景是网络编程里服务端的实现,服务端为每个客户端请求创建一个独立的线程,当线程处理完请求后,自动销毁,这是一种最简单的并发处理网络请求的方法。

相关推荐

  1. 设计模式线分工模式--- Thread-Per-Message模式

    2024-01-18 18:24:03       55 阅读
  2. 设计模式线分工模式---Worker Thread模式

    2024-01-18 18:24:03       65 阅读
  3. 设计模式线分工模式--- 生产-消费者模式

    2024-01-18 18:24:03       65 阅读
  4. 使用Python threading模块创建线程序

    2024-01-18 18:24:03       24 阅读
  5. 线上下文设计模式

    2024-01-18 18:24:03       54 阅读
  6. Worker-Thread设计模式

    2024-01-18 18:24:03       61 阅读
  7. C++面试线池、智能指针、设计模式

    2024-01-18 18:24:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 18:24:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 18:24:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 18:24:03       82 阅读
  4. Python语言-面向对象

    2024-01-18 18:24:03       91 阅读

热门阅读

  1. 设计模式之多线程分工模式---Worker Thread模式

    2024-01-18 18:24:03       65 阅读
  2. Template -- React

    2024-01-18 18:24:03       57 阅读
  3. css盒模型

    2024-01-18 18:24:03       49 阅读
  4. Docker教程 Dockerfile 标签介绍

    2024-01-18 18:24:03       61 阅读
  5. 学习记录1.14

    2024-01-18 18:24:03       41 阅读
  6. SQL两表/多表关联查询--JOIN语句

    2024-01-18 18:24:03       67 阅读
  7. 【期末总复习】计算机视觉理论与实践

    2024-01-18 18:24:03       46 阅读
  8. 网络配置以及命令详解

    2024-01-18 18:24:03       45 阅读
  9. k8s-pod的控制器

    2024-01-18 18:24:03       50 阅读
  10. MYSQL自连接、子查询

    2024-01-18 18:24:03       52 阅读
  11. 面试经典150题(85-87)

    2024-01-18 18:24:03       52 阅读
  12. 军事课堂MR情景仿真实训教学

    2024-01-18 18:24:03       55 阅读