文档章节

Spring线程池配置说明

爱兔一生
 爱兔一生
发布于 2015/07/08 20:16
字数 494
阅读 196
收藏 2

应用场景

1.上传视频的时候后台自动转换flv格式(JAVE)。
2.发文的时候通知关注我的人我更新文章了。
3.And等等。

JDK原生的线程池

public static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(20, 30, 3,
		TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(1),
		new ThreadPoolExecutor.CallerRunsPolicy());
	
	第一个参数是初始化线程池大小;
	第二个是最大线程池大小,当初始化的线程不能满足时,允许扩展到的线程池容量最大数;
	第三个是当前线程池的容量超出初始化线程池的大小,并且存在空闲线程。用来指定过了多少时间自动回收。
	第四个是时间单位
	第五个是workQueue,工作队列。一共有三种。(SynchronousQueue、 LinkedBlockingQueue、ArrayBlockingQueue)
	第六个是指定当线程池里面的线程都在工作。有新的任务进来是要执行的策略。
	    一共有4个
	    AbortPolicy(拒绝抛异常), 
	    CallerRunsPolicy(等待线程池中有空闲的线程,推荐使用), 
	    DiscardOldestPolicy(忽略最老的任务,然后执行我们提交的),
	    DiscardPolicy(忽略你提交的任务)。

Spring线程池使用

在spring配置文件加入以下内容,位置就不说了。

xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd


以下策略2选一即可,一般只选第一种

1.当线程池满了时新来的线程等待有空闲线程执行 <task:annotation-driven executor="executorWithCallerRunsPolicy"/> <task:executor id="executorWithCallerRunsPolicy" pool-size="2-5" queue-capacity="50" rejection-policy="CALLER_RUNS"/>

2.当线程池满了时新来的线程直接抛出异常拒绝执行 <task:annotation-driven executor="executorWithPoolSizeRange"/> <task:executor id="executorWithPoolSizeRange" pool-size="2-5" queue-capacity="50" />

以上配置线程池的最大容量为”最大的pool-size+queue-capacity“,即为55。

配置好了之后,只需要在被spring管理的bean中的方法上面加入”@Async“注解即可,是不是很简单。

通过spring的线程池,简化了我们的开发。

© 著作权归作者所有

爱兔一生
粉丝 12
博文 18
码字总数 11362
作品 0
常州
高级程序员
私信 提问
Spring Cloud Edgware新特性之二:如何配置Zuul的Hystrix线程池

Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。 Spring Cloud即将发布Spring Cloud Edgware 版本。该版本解决了不少B...

周立_ITMuch
2017/10/25
0
0
Spring Boot系列二 Spring @Async异步线程池用法总结

. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调...

Canaan_
2018/04/07
0
3
聊聊Druid(一)-- 配置与初始化

这里以我们常用在spring环境中集成druid的方式进行说明。 spring中的druid配置参考: 通常来说,只需要修改initialSize、minIdle、maxActive。 如果用Oracle,则把poolPreparedStatements配置...

evexu
2018/03/02
0
0
Spring Boot 配置和使用多线程池

某些情况下,我们需要在项目中对多种任务分配不同的线程池进行执行。从而通过监控不同的线程池来控制不同的任务。为了达到这个目的,需要在项目中配置多线程池。 spring boot 提供了简单高效...

阿懒土灵
2018/06/07
0
0
实现Spring中的任务调度及异步执行

首先要端正一下本人的态度,开发了很长时间的Java Web项目,寄托于Spring MVC的架构,多数时间都是在处理业务逻辑问题,所以我个人单纯地认为Web开发,多线程的应用场景应该不多,能不用尽量...

chace0120
2014/08/01
0
1

没有更多内容

加载失败,请刷新页面

加载更多

程序员随想-关于分享

最早的时候,文字是贵族这些上层人士才会学习的,底层人士没有资格和渠道去学习,同样用文字、图像等其他载体承载的知识大部分也只有贵族阶层才能享受的。后来有了造纸术、印刷术,成本降低,...

Lubby
33分钟前
1
0
聊聊hibernate的session-level repeatable reads

序 本文主要研究一下hibernate的session-level repeatable reads 实例 doInTransaction(session -> { Product product = new Product(); product.setId(1L); product.setQuanti......

go4it
44分钟前
0
0
ubuntu或ubuntu kylin优麒麟中安装QQ、wechat微信、百度网盘

从中国国内的地址下载deepin wine,码云上的。这样网速比较快。然后,按照说明向下安装。 https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu...

gugudu
56分钟前
2
0
基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源...

别打我会飞
今天
14
0
Zookeeper的实践指南

本章重点 1.数据存储2.基于Java API初探Zookeeper的使用3.深入分析Watcher机制的实现原理4.Curator客户端的使用,简单高效 数据存储 事务日志快照日志运行时日志 bin/zookeepe...

须臾之余
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部