Spring线程池配置说明
2015-07-08 20:16
561 查看
应用场景
1.上传视频的时候后台自动转换flv格式(J***E)。 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的线程池,简化了我们的开发。
相关文章推荐
- Java abstract class vs interface
- struts2概述
- java进制转换
- 《java编程思想-第2章》读书笔记
- java中的 FileWriter类 和 FileReader类的一些基本用法
- Java 查找算法
- Java注释 基本的几个注释词应用
- Java内存分配和String类型的深度解析***
- Java实现从文件中读入写入学生信息并实现增删改
- JavaBean BeanUtils包操作JavaBean类
- java比较两个文件是否相同
- Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- java集合框架--List、Set、Map
- java.lang.NoClassDefFoundError: org/dom4j/DocumentHelper dom报错
- ios下使用RSA算法加密与java后台解密配合demo
- 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)
- Java的垃圾回收总结
- Java面向对象学习阶段小结
- 《编程导论(Java)·6.3 private修饰符》
- springMVC学习笔记-加载静态文件,如样式表