欢迎来到天天文库
浏览记录
ID:20442066
大小:132.35 KB
页数:10页
时间:2018-10-12
《spring线程池应用详解》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Spring线程池应用详解多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说如何使用spring来处理并发事务:1.了解TaskExecutor接口Spring的TaskExecutor接口等同于java.util.concurrent.Executor接口。实际上,它存在的主要原因是为了在使用线程池的时候,将对Java5的依赖抽象出来。这个接口只有一个方法execute(Runnabletask),它根据线程池的语
2、义和配置,来接受一个执行任务。最初创建TaskExecutor是为了在需要时给其他Spring组件提供一个线程池的抽象。例如ApplicationEventMulticaster组件、JMS的AbstractMessageListenerContainer和对Quartz的整合都使用了TaskExecutor抽象来提供线程池。当然,如果你的bean需要线程池行为,你也可以使用这个抽象层。2.TaskExecutor接口的实现类(1)SimpleAsyncTaskExecutor类这个实现不重用任]可线程,或者说它每次调用都启动一个新线程。但是,它还是支持对并发总数
3、设限,当超过线程并发总数限制时,阻塞新的调用,直到有位置被释放。如果你需要真正的池,请继续往下看。(2)SyncTaskExecutor类这个实现不会异步执行。相反,每次调用都在发起调用的线程中执行。它的主要用处是在不需要多线程的时候,tl:如简单的testcase。⑶ConcurrentTaskExecutor类这个实现是对」ava5java.util.concurrent.Executor类的包装0有另一个备选,ThreadPoolTaskExecutor类,它暴露了Executor的配置参数作为bean属性。很少需要使用ConcurrentTaskExecu
4、tor,但是如果ThreadPoolTaskExecutor不敷所需,ConcurrentTaskExecutor是另外一个备选。(4)SimpleThreadPoolTaskExecutor类这个实现实际上是Quartz的SimpleThreadPool类的子类,它会监听Spring的生命周期回调。当你有线程池,需要在Quartz和非Quartz组件中共用时,这是它的典型用处。(5)ThreadPoolTaskExecutor类它不支持任何对java.util.concurrent包的替换或者下行移植。DougLea和DawidKurzyniec对java.ut
5、il.concurrent的实现都采用了不同的包结构,导致它们无法正确运行。这个实现只能在Java5环境中使用,但是却是这个环境中最常用的。它暴露的beanproperties可以用来配置一个java.util.concurrent.ThreadPoolExecutor,把它包装到一个TaskExecutor中。如果你需要更加先进的类比如ScheduledThreadPoolExecutor,我们建议你使用ConcurrentTaskExecutor来替代。(6)TimerTaskExecutor类这个实现使用一个TimerTask作为其背后的实现。它和SyncT
6、askExecutor的不同在于,方法调用是在一个独立的线程中进行的,虽然在那个线程中是同步的。(7)WorkManagerTaskExecutor类这个实现使用了CommonJWorkManager作为其底层实现,是在Springcontext中配置CommonJWorkManager应用的最重要的类。和SimpleThreadPoolTaskExecutor类似,这个类实现了WorkManager接口,因此可以直接作为WorkManager使用。一、初始化1,直接凋用[java]viewplaincopyprint?1.ThreadPoolTaskExecut
7、orpoolTaskExecutor=newThreadPoolTaskExecutor();1.//线程池所使用的缓冲队列2.poolTaskExecutor.setQueueCapacity(200);3.//线程池維护线程的最少数跫4.poolTaskExecutor.setCorePoolSize(5);5.//线程池维护线程的鉍大数量6.poolTaskExecutor.setMaxPoolSize(1000);7.//线程池维护线程所允许的空闲吋间8.poolTaskExecutor.setKGGpAliveSeconds(30000);9.poolT
8、askEx
此文档下载收益归作者所有