本文主要是介绍设计模式之多线程分工模式--- 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 模式的一个最经典的应用场景是网络编程里服务端的实现,服务端为每个客户端请求创建一个独立的线程,当线程处理完请求后,自动销毁,这是一种最简单的并发处理网络请求的方法。
这篇关于设计模式之多线程分工模式--- Thread-Per-Message模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!