实际项目中用到多线程,提供spring配置线程池完整代码如下
本项目用的jar包为基本的spring配置jar包
1:.properties配置文件中线程池参数
#############################
taskExecutor.corePoolSize=100
taskExecutor.keepAliveSeconds=10
taskExecutor.maxPoolSize=100
taskExecutor.queueCapacity=20
#############################
2:spring Bean配置文件ApplicationContext.xml
--------------------------------------------------------------------------------------------------------------------
<!-- 配置线程池 -->
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 线程池维护线程的最少数量 -->
<property name="corePoolSize" value="${taskExecutor.corePoolSize}" />
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="${taskExecutor.keepAliveSeconds}" />
<!-- 线程池维护线程的最大数量 -->
<property name="maxPoolSize" value="${taskExecutor.maxPoolSize}" />
<!-- 线程池所使用的缓冲队列 -->
<property name="queueCapacity" value="${taskExecutor.queueCapacity}" />
<!-- 子线程是否允许超时,必须允许 -->
<property name="allowCoreThreadTimeOut" value="true" />
</bean>
----------------------------------------------------------------------------------------------------------------------
3:测试线程类
************************************************************************************
public class testThread extends Thread{
private int i = 0;
@Override
public void run() {
for (i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
***********************************************************************************
4:main测试
***********************************************************************************
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
public static void main(String[] args) {
AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
ThreadPoolTaskExecutor taskExecutor=(ThreadPoolTaskExecutor) applicationContext.getBean("taskExecutor");
taskExecutor.submit(new testThread()); //测试线程1
taskExecutor.submit(new testThread()); //测试线程 2
//或则
// taskExecutor.execute(new testThread());
// taskExecutor.execute(new testThread());
}
**********************************************************************************
结果输出:
taskExecutor-1 0
taskExecutor-2 0
taskExecutor-2 1
taskExecutor-2 2
taskExecutor-2 3
taskExecutor-2 4
taskExecutor-1 1
taskExecutor-1 2
taskExecutor-1 3
taskExecutor-1 4
// taskExecutor-1 线程1
// taskExecutor-2 线程2