Skip to content

线程 ​

一、概述 ​

TioThreadUtils 是一个基于 java.util.concurrent.ExecutorService 封装的线程池工具类,用于在项目中统一管理和使用线程池资源。 它提供了:

  • 全局唯一的固定大小线程池
  • 统一的线程命名规则
  • 简化的任务提交与执行方法
  • 线程池的启动、停止与重启能力

适用于异步任务执行、并发处理、后台任务等场景。


二、线程池特性 ​

1. 线程池类型 ​

  • FixedThreadPool(固定大小线程池)
  • 线程数量计算规则:
java
int nThreads = max(16, CPU核心数 × 4)

确保在高并发场景下有足够的线程处理任务。


2. 线程命名规则 ​

线程名称格式:

tio-utils-1
tio-utils-2
tio-utils-3
...

优点:

  • 便于日志分析
  • 方便排查线程问题
  • 提升运维和调试效率

3. 生命周期管理 ​

  • 类加载时自动调用 start() 初始化线程池

  • 支持手动:

    • 启动(start)
    • 停止(stop)
    • 重启(restart)

三、基本使用方法 ​

1. 获取线程池实例 ​

java
ExecutorService executorService = TioThreadUtils.getFixedThreadPool();

适用于需要直接操作 ExecutorService 的场景。


2. 提交 Runnable 任务(无返回值) ​

java
TioThreadUtils.submit(() -> {
  System.out.println("执行异步任务");
});

返回值:

java
Future<?> future

3. 提交 Runnable 任务(带返回结果) ​

java
Future<String> future = TioThreadUtils.submit(() -> {
  System.out.println("执行任务");
}, "success");

String result = future.get(); // 返回 "success"

4. 提交 Callable 任务(有返回值) ​

java
Future<Integer> future = TioThreadUtils.submit(() -> {
  // 业务逻辑
  return 100;
});

Integer result = future.get();

适用于需要计算结果或捕获异常的任务。


5. 直接执行任务(execute) ​

java
TioThreadUtils.execute(() -> {
  System.out.println("直接执行任务");
});

说明:

  • 不返回 Future
  • 适合“只执行、不关心结果”的任务

四、线程池控制方法 ​

1. 启动线程池 ​

java
TioThreadUtils.start();

说明:

  • 默认在类加载时已自动调用
  • 一般无需手动调用,除非曾调用过 stop()

2. 停止线程池 ​

java
TioThreadUtils.stop();

行为:

  • 调用 shutdownNow()
  • 尝试中断所有正在执行的任务
  • 将线程池引用置为 null

注意事项:

  • 停止后不可再提交任务
  • 再次使用前必须调用 start() 或 restart()

3. 重启线程池 ​

java
TioThreadUtils.restart();

等价于:

java
TioThreadUtils.stop();
TioThreadUtils.start();

适用场景:

  • 系统重载
  • 配置热更新
  • 异常恢复

五、使用建议与注意事项 ​

1. 推荐使用场景 ​

  • IO 密集型任务
  • 异步业务处理
  • 后台任务执行
  • 并发请求处理

2. 注意事项 ​

  • 不建议在任务中执行长时间阻塞操作(如无限等待)
  • 提交任务前确保线程池未被 stop()
  • 任务内部异常应自行捕获,避免影响线程复用
  • 不适合对线程数量、队列策略有特殊要求的场景

六、示例:典型使用场景 ​

java
public class OrderService {

  public void asyncCreateOrder() {
    TioThreadUtils.submit(() -> {
      // 创建订单
      // 发送消息
      // 写日志
    });
  }
}

七、总结 ​

TioThreadUtils 提供了一种 简单、统一、可控 的线程池使用方式,适合在项目中作为默认的异步执行工具类。 通过合理使用,可以有效提升系统并发能力和代码可维护性。

如需更复杂的线程池策略(如队列控制、拒绝策略、动态扩容),可在此基础上进行扩展。

MIT Licensed