系列文章目录
设计模式之避免共享的设计模式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中的线程是一个重量级的对象,创建成本很高,第一点创建线程比较耗时
,第二点线程占用的内存也比大
。所以为每个请求创建一个新的线程并不适合高并发场景
。文章来源:https://www.toymoban.com/news/detail-791093.html
/**
* @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 模式的一个最经典的应用场景是网络编程里服务端的实现,服务端为每个客户端请求创建一个独立的线程,当线程处理完请求后,自动销毁,这是一种最简单的并发处理网络请求的方法。文章来源地址https://www.toymoban.com/news/detail-791093.html
到了这里,关于设计模式之多线程分工模式--- Thread-Per-Message模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!