Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9458d09f69 | |||
| b2ab34c344 |
@@ -1,239 +1 @@
|
||||
# spring-boot-threadpool-demo
|
||||
|
||||
> 📚 适用于 SpringBoot 的多种线程池实现
|
||||
|
||||
**注意:Main 分支不包含具体实现,具体实现在项目的不同分支上**
|
||||
|
||||
## 项目结构
|
||||
```
|
||||
spring-boot-threadpool-demo/
|
||||
├── src/
|
||||
│ ├── main/
|
||||
│ │ ├── java/cn/hezhaohui/threadpool/
|
||||
│ │ │ ├── ThreadpoolApplication.java
|
||||
│ │ │ ├── config/
|
||||
│ │ │ ├── service/
|
||||
│ │ │ ├── controller/
|
||||
│ │ │ └── model/
|
||||
│ └── resources/
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## 分支大纲
|
||||
|
||||
### 分支 1: `basic-async-config`
|
||||
**主题:基础 @Async 注解方式**
|
||||
- 实现简单的异步任务执行
|
||||
- 配置基本的线程池参数
|
||||
- 测试异步方法调用
|
||||
- 包含线程安全性验证
|
||||
|
||||
### 分支 2: `custom-executor-config`
|
||||
**主题:自定义 Executor 配置**
|
||||
- 使用 ThreadPoolTaskExecutor 自定义配置
|
||||
- 配置核心线程数、最大线程数、队列容量
|
||||
- 设置线程名称前缀和拒绝策略
|
||||
- 添加线程池监控和管理
|
||||
|
||||
### 分支 3: `application-properties-config`
|
||||
**主题:配置文件驱动方式**
|
||||
- 使用 application.yml 配置线程池
|
||||
- 支持不同环境的配置切换
|
||||
- 动态配置线程池参数
|
||||
- 配置文件验证和异常处理
|
||||
|
||||
### 分支 4: `completable-future-config`
|
||||
**主题:CompletableFuture 方式**
|
||||
- 使用 CompletableFuture 实现异步编程
|
||||
- 异步任务链式调用
|
||||
- 异常处理和结果聚合
|
||||
- 异步回调机制实现
|
||||
|
||||
### 分支 5: `scheduled-task-config`
|
||||
**主题:定时任务线程池**
|
||||
- 配置定时任务线程池
|
||||
- 定时任务执行示例
|
||||
- 任务调度和管理
|
||||
- 定时任务与异步任务结合
|
||||
|
||||
### 分支 6: `advanced-monitoring-config`
|
||||
**主题:高级监控和管理**
|
||||
- 线程池状态监控
|
||||
- 自定义线程池管理器
|
||||
- 性能指标收集
|
||||
- 健康检查和告警机制
|
||||
|
||||
### 分支 7: `multiple-pool-config`
|
||||
**主题:多线程池配置**
|
||||
- 不同业务场景的线程池隔离
|
||||
- 配置多个不同的线程池
|
||||
- 线程池路由和选择机制
|
||||
- 资源隔离和性能优化
|
||||
|
||||
### 分支 8: `error-handling-config`
|
||||
**主题:异常处理和容错**
|
||||
- 异步任务异常处理
|
||||
- 重试机制实现
|
||||
- 降级策略
|
||||
- 异常日志记录和监控
|
||||
|
||||
## 各分支详细实现内容
|
||||
|
||||
### 分支 1: basic-async-config
|
||||
```java
|
||||
// 配置类
|
||||
@Configuration
|
||||
@EnableAsync
|
||||
public class AsyncConfig { }
|
||||
|
||||
// 服务类
|
||||
@Service
|
||||
public class AsyncService {
|
||||
@Async
|
||||
public void simpleAsyncTask() { }
|
||||
}
|
||||
|
||||
// 测试类
|
||||
@SpringBootTest
|
||||
public class AsyncTest { }
|
||||
```
|
||||
|
||||
### 分支 2: custom-executor-config
|
||||
```java
|
||||
// 配置类
|
||||
@Configuration
|
||||
@EnableAsync
|
||||
public class CustomAsyncConfig {
|
||||
@Bean("customExecutor")
|
||||
public Executor customExecutor() { }
|
||||
}
|
||||
|
||||
// 服务类
|
||||
@Service
|
||||
public class CustomAsyncService {
|
||||
@Async("customExecutor")
|
||||
public void customAsyncTask() { }
|
||||
}
|
||||
```
|
||||
|
||||
### 分支 3: application-properties-config
|
||||
```yaml
|
||||
# application.yml
|
||||
spring:
|
||||
task:
|
||||
execution:
|
||||
pool:
|
||||
core-size: 5
|
||||
max-size: 10
|
||||
queue-capacity: 100
|
||||
```
|
||||
|
||||
### 分支 4: completable-future-config
|
||||
```java
|
||||
// 服务类
|
||||
@Service
|
||||
public class CompletableFutureService {
|
||||
public CompletableFuture<String> asyncMethod() {
|
||||
return CompletableFuture.supplyAsync(() -> "result");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 分支 5: scheduled-task-config
|
||||
```java
|
||||
// 配置类
|
||||
@Configuration
|
||||
@EnableScheduling
|
||||
public class ScheduledConfig {
|
||||
@Bean("scheduledExecutor")
|
||||
public Executor scheduledExecutor() { }
|
||||
}
|
||||
|
||||
// 定时任务
|
||||
@Component
|
||||
public class ScheduledTask {
|
||||
@Scheduled(fixedRate = 5000)
|
||||
@Async("scheduledExecutor")
|
||||
public void scheduledTask() { }
|
||||
}
|
||||
```
|
||||
|
||||
### 分支 6: advanced-monitoring-config
|
||||
```java
|
||||
// 线程池监控
|
||||
@Component
|
||||
public class ThreadPoolMonitor {
|
||||
public void monitorThreadPool() { }
|
||||
}
|
||||
|
||||
// 健康检查
|
||||
@RestController
|
||||
public class ThreadPoolHealthController { }
|
||||
```
|
||||
|
||||
### 分支 7: multiple-pool-config
|
||||
```java
|
||||
// 多个线程池配置
|
||||
@Configuration
|
||||
@EnableAsync
|
||||
public class MultiplePoolConfig {
|
||||
@Bean("businessExecutor")
|
||||
public Executor businessExecutor() { }
|
||||
|
||||
@Bean("ioExecutor")
|
||||
public Executor ioExecutor() { }
|
||||
}
|
||||
|
||||
// 服务类使用不同线程池
|
||||
@Service
|
||||
public class MultiPoolService {
|
||||
@Async("businessExecutor")
|
||||
public void businessTask() { }
|
||||
|
||||
@Async("ioExecutor")
|
||||
public void ioTask() { }
|
||||
}
|
||||
```
|
||||
|
||||
### 分支 8: error-handling-config
|
||||
```java
|
||||
// 异常处理配置
|
||||
@Service
|
||||
public class ErrorHandlingService {
|
||||
@Async("errorHandlingExecutor")
|
||||
public void taskWithErrorHandling() { }
|
||||
}
|
||||
|
||||
// 全局异常处理器
|
||||
@RestControllerAdvice
|
||||
public class AsyncExceptionHandler { }
|
||||
```
|
||||
|
||||
## 测试用例设计
|
||||
|
||||
### 每个分支都需要包含的测试:
|
||||
1. **线程池配置验证**
|
||||
2. **异步任务执行验证**
|
||||
3. **性能基准测试**
|
||||
4. **异常处理测试**
|
||||
5. **资源使用监控**
|
||||
|
||||
## 部署和监控
|
||||
|
||||
### 分支 9: `monitoring-deployment`
|
||||
**主题:部署和监控配置**
|
||||
- Docker 部署配置
|
||||
- Prometheus 监控集成
|
||||
- Grafana 可视化
|
||||
- 日志收集和分析
|
||||
|
||||
## 文档和说明
|
||||
|
||||
### README.md 包含:
|
||||
1. 各分支功能说明
|
||||
2. 配置参数说明
|
||||
3. 使用示例
|
||||
4. 性能测试结果
|
||||
5. 最佳实践建议
|
||||
|
||||
这种分层结构可以让你清楚地看到不同线程池配置方式的特点和适用场景,便于学习和实际项目应用。
|
||||
> 注意:Java ExecutorService 使用的默认等待队列是无限大小的 `LinkedBlockingQueue`,容易 OOM,不推荐使用
|
||||
@@ -1,11 +1,34 @@
|
||||
package cn.hezhaohui.threadpool;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@SpringBootApplication
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
public class ThreadPoolApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ThreadPoolApplication.class, args);
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
ExecutorService executorService = Executors.newFixedThreadPool(2);
|
||||
for (int i = 0; i < 100000000; i++) {
|
||||
executorService.execute(() -> {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
int random = new Random().nextInt(1000);
|
||||
for (int j = 1; j < random; j++) {
|
||||
builder.append(j);
|
||||
}
|
||||
try {
|
||||
TimeUnit.HOURS.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
log.error("[Error]");
|
||||
}
|
||||
log.info(builder.toString());
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
executorService.shutdown();
|
||||
executorService.awaitTermination(1, TimeUnit.HOURS);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user