Jdk1.4下线程池
JSR 166 (java.util.concurrent)是jdk1.5的部分,它给我们的多线程开发带来很多方便。因为很多应用环境还是在jdk1.4下,目前还无法升级到jkd1.5,如我们的项目很多是在weblogic8.1上运行。想在jdk1.4下享受JSR 166的好处,可以使用backport-util-concurrent,下载地址为: http://backport-jsr166.sourceforge.net/index.php
backport-util-concurrent的api和jdk1.5的 java.util.concurrent基本一致吧,可以参照jdk1.5的中文doc,去做。
通常项目中都使用spring,可以把连接池配到spring里,当成一个服务使用。(因为使用的spring版本比较低1.2.8),
1. 在spring中配置连接池
<!-- BlockingQueue -->
<bean id="blockingQueue" class="edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue">
<constructor-arg><value>2000</value></constructor-arg>
</bean>
<bean id="timeUnit" class="edu.emory.mathcs.backport.java.util.concurrent.TimeUnit" factory-method="valueOf">
<constructor-arg><value>SECONDS</value></constructor-arg>
</bean>
<!-- work thread pool -->
<bean id="
executorService" class="edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor" destroy-method="shutdown">
<!--池中所保存的线程数,包括空闲线程 -->
<constructor-arg><value>10</value></constructor-arg>
<!-- 池中允许的最大线程数 -->
<constructor-arg><value>200</value></constructor-arg>
<!-- 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间 -->
<constructor-arg><value>60</value></constructor-arg>
<!-- 参数的时间单位 -->
<constructor-arg><ref bean="timeUnit"/></constructor-arg>
<!-- 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务 -->
<constructor-arg><ref bean="blockingQueue"/></constructor-arg>
</bean>
2. 实现Callable接口
public class QfSlave
implements Callable
{
public Object call() throws Exception
{//你的线程任务
}
}
3. 提交任务到线程池,将
executorService注入到需要线程池的地方
QfSlave slave = new QfSlave();
executorService.submit(slave);//提交任务