java线程池的使用

在实际的开发中,遇到需要异步执行某个任务或多个任务的时候,我们通常都会考虑使用多线程进行编程,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。

那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?

在java中可以通过线程池来达到这样的效果,本文将介绍一种线程池的使用方法。使用ThreadPoolTaskExecutor来实现线程池,通过spring进行配置,详解如下:

        <!-- 配置线程池 -->
<bean id="threadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 线程池维护线程的最少数量 -->
<property name="corePoolSize" value="50" />
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="30000" />
<!-- 线程池维护线程的最大数量 -->
<property name="maxPoolSize" value="200" />
<!-- 线程池所使用的缓冲队列 -->
<property name="queueCapacity" value="1000" />
</bean>

corePoolSize是线程池维护线程的最少数量 ,即线程池中可运行的线程数,超过就需要进入队列中排队,待线程池中有释放线程资源时,再从队列中取出依次执行。

keepAliveSeconds是线程池维护线程所允许的空闲时间,即线程池中线程的可允许空闲时间,超过该时间,则线程关闭。

maxPoolSize是线程池中可维护最大线程数量,超过则不接受任务,抛出异常。

        queueCapacity是线程池所使用的缓冲队列,队列大小设置。


代码中实际使用如下:

//获取context中线程池实例

ThreadPoolTaskExecutor threadPool = (ThreadPoolTaskExecutor) context.getBean("threadPool");

//调用execute方法,传入线程,使用了Runnable接口创建线程。

 threadPool.execute(new Runnable() {

public void run(){

//TODO 

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值