2009年1月15日星期四

Spring线程池ThreadPoolTaskExecutor

JAVA版本 5.0
J2EE容器 OC4J

controller在处理一个业务后,将消息丢入线程池,然后由task去处理接下来的业务
在30个并发后,一段时间内这个应用会down掉,就像没有部署过一样。

ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
// 最小的同时可执行的任务数
taskExecutor.setCorePoolSize(1);
// 最大的同时可执行的任务数.
taskExecutor.setMaxPoolSize(20);
// 存储任务的队列的容量.
taskExecutor.setQueueCapacity(10000);
taskExecutor.initialize();

最新发现是在队列堆满时会报错,但没有截获,但也不至于把应用给弄down。。。
加了截获,一切就ok了。

需要加一个quartz,防止线程池的丢失和因为压力大线程池队列满而被抛弃的业务消息。

如果条件允许,应该改成jms和mdb的方式更好。

没有评论: