用java写一个spring的线程池支持高并发高吞吐量服务器是4核心8G内存的
这里提供一个简单的基于Spring的线程池实现示例,可以根据实际需求进行调整。
- 配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 线程池配置 -->
<task:executor id="threadPool" pool-size="50-200" queue-capacity="1000" rejection-policy="CALLER_RUNS"/>
<!-- 任务调度器配置 -->
<task:scheduler id="scheduler" pool-size="10"/>
</beans>
- 编写测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.task.TaskExecutor;
public class ThreadPoolTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
TaskExecutor taskExecutor = (TaskExecutor) context.getBean("threadPool");
// 模拟高并发请求,提交1000个任务
for (int i = 0; i < 1000; i++) {
final int taskId = i;
taskExecutor.execute(new Runnable() {
@Override
public void run() {
System.out.println("任务" + taskId + "开始执行...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务" + taskId + "执行完成。");
}
});
}
}
}
- 运行测试类,观察控制台输出。可以看到线程池成功地处理了1000个任务,并且未出现OOM等异常。
具体说明:
- 线程池的核心线程数为50,最大线程数为200,任务队列的容量为1000。当任务数量超过核心线程数时,会先创建新线程,当线程池中的线程数量达到最大线程数时,新任务会进入队列等待执行,如果队列已满,则根据拒绝策略进行处理。
- 任务调度器的线程池大小为10,用于定时任务等场景。如果不需要定时任务,则可以省略此配置。
- 在运行测试类时,如果控制台输出过于频繁,可以将Thread.sleep的时间调整为较大值,以减少输出量。
原文地址: https://www.cveoy.top/t/topic/PX3 著作权归作者所有。请勿转载和采集!