package spring.batch.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@RestController
public class TestThreadPoolExecutorController {
private ThreadPoolExecutor es = new ThreadPoolExecutor(0, 1, 5, TimeUnit.MINUTES,new LinkedBlockingQueue<>(2000));
@GetMapping("/test/thread/pool")
public String exeTask() {
// 获取当前线程池中线程数量
int poolSize = es.getPoolSize();
// 获取正在执行任务的线程数量
int activeCount = es.getActiveCount();
// 获取等待执行的任务数量
int queueSize = es.getQueue().size();
// getCompletedTaskCount:已经执行完成的任务数量
// getLargestPoolSize:线程池里曾经创建过的最大的线程数量。这个主要是用来判断线程是否满过。
// getActiveCount:获取正在执行任务的线程数据
// getPoolSize:获取当前线程池中线程数量的大小
System.out.println("当前空闲数量: " + (poolSize - activeCount));
System.out.println("工作数量: " + activeCount);
System.out.println("总数量: " + poolSize);
System.out.println("等待数量: " + queueSize);
System.out.println("已经执行完成的任务数量: " + es.getCompletedTaskCount());
System.out.println("线程池里曾经创建过的最大的线程数量: " + es.getLargestPoolSize());
for(int i=0;i<20;i++) {
es.execute(new Runnable() {
@Override
public void run() {
System.out.println("线程号 : " + Thread.currentThread().getId());
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return "------------ test obj -------------";
}
});
}
// 获取当前线程池中线程数量
poolSize = es.getPoolSize();
// 获取正在执行任务的线程数量
activeCount = es.getActiveCount();
// 获取等待执行的任务数量
queueSize = es.getQueue().size();
// getCompletedTaskCount:已经执行完成的任务数量
// getLargestPoolSize:线程池里曾经创建过的最大的线程数量。这个主要是用来判断线程是否满过。
// getActiveCount:获取正在执行任务的线程数据
// getPoolSize:获取当前线程池中线程数量的大小
System.out.println("当前空闲数量: " + (poolSize - activeCount));
System.out.println("工作数量: " + activeCount);
System.out.println("总数量: " + poolSize);
System.out.println("等待数量: " + queueSize);
System.out.println("已经执行完成的任务数量: " + es.getCompletedTaskCount());
System.out.println("线程池里曾经创建过的最大的线程数量: " + es.getLargestPoolSize());
return "back exe";
}
}
java ThreadPoolExecutor
于 2023-06-10 19:31:52 首次发布
该代码示例展示了如何在SpringBoot应用中创建并使用ThreadPoolExecutor进行任务调度。Controller通过@GetMapping注解响应HTTP请求,执行线程池的相关操作,如获取线程池状态(线程数量、活跃任务、等待队列等),并提交新的任务到线程池执行。
170万+

被折叠的 条评论
为什么被折叠?



