网站首页 > java教程 正文
在 Java 中,线程(Thread)是程序执行的最小单位。线程是指操作系统能够进行运算调度的最小单位,可以理解为操作系统所分配的一段可执行的代码,可以与其他线程并发执行,共享相同的进程空间和资源。
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。
一般来说,所有的程序至少有一个线程,称为主线程,这个主线程是由 JVM 或 Java 虚拟机在程序执行时创建的。当主线程创建好之后,会调用 main() 方法来执行。
真正应用场景里,比如 springboot 项目里会有很多不同的线程池 。
从图中,我们看到 tomcat 容器内有不同的线程池,比如接收连接线程池,执行线程,业务自定义线程池等等。
试想一下,假如我们只有一种线程池,那么假设某种业务阻塞了,系统中所有的业务都会受影响。
所以我们在设计系统时,原则要做到让各个线程池各司其职,才能让系统的资源调度更加合理。
各司其职的特点是:线程池隔离,也就是指将不同任务分配给不同线程池来处理的方式。主要有如下两点方式:
- 任务类型隔离
- 将不同类型的任务分配给不同的线程池处理,例如将计算密集型任务分配给 CPU 密集型的线程池,将 IO 密集型任务分配给 IO 密集型的线程池。
- 业务模块隔离
- 将不同业务模块的任务分配给不同的线程池处理,例如将订单处理任务分配给订单处理线程池,将用户查询任务分配给用户查询线程池。
我们举知名的消息队列 RocketMQ 为例,它在处理网络请求中的线程池隔离做得非常漂亮:
RocketMQ 里 ,网络请求都会携带命令编码,每种命令映射对应的处理器,而处理器又会注册对应的线程池。
当服务端 Broker 接收到发送消息命令时,都会有单独的线程池 sendMessageExecutor 来处理这种命令请求。
基于 ThreadPoolExecutor 做了一个简单的封装 ,
BrokerFixedThreadPoolExecutor 构造函数包含六个核心参数:
- 核心线程数和最大线程数相同 ,数量是:cpu核数和4比较后的最小值;
- 空闲线程的回收的时间限制,默认1分钟;
- 发送消息队列,有界队列,默认10000;
- 线程工厂 ThreadFactoryImpl ,定义了线程名前缀:SendMessageThread_ 。
RocketMQ 实现了一个简单的线程工厂:ThreadFactoryImpl,线程工厂可以定义线程名称,以及是否是守护线程 。
- 上一篇: 一个注解 —— 完美实现分布式锁
- 下一篇: 面试突击29:说一下线程池7个参数的含义?
猜你喜欢
- 2025-05-30 线程池的使用及ThreadPoolExecutor源码分析
- 2025-05-30 面试官:什么是虚拟线程?为什么要有虚拟线程?
- 2025-05-30 「超级详细」Java线程实现原理
- 2025-05-30 并发编程之ThreadPoolExecutor线程池原理解析
- 2025-05-30 阿里资深架构推荐学习四本实战书籍:MySQL+Redis+Kfaka+多线程
- 2025-05-30 杰哥教你面试之一百问系列:java多线程
- 2025-05-30 面试突击29:说一下线程池7个参数的含义?
- 2025-05-30 一个注解 —— 完美实现分布式锁
- 2025-05-30 Java 线程的生命周期及各阶段状态
- 2025-05-30 CompletableFuture也就这么一回事
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)