Spring线程池和监听器的使用

原创
2019/02/14 09:35
阅读数 206

线程池:

1.定义一个类,实现Runnable接口,并重写run()方法。

2.注入线程池的配置。

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
	    <!-- 核心线程数 -->
	    <property name="corePoolSize" value="5" />
	    <!-- 最大线程数 -->
	    <property name="maxPoolSize" value="10" />
	    <!-- 队列最大长度 >=mainExecutor.maxSize -->
	    <property name="queueCapacity" value="100" />
	    <!-- 线程池维护线程所允许的空闲时间 -->
	    <property name="keepAliveSeconds" value="3000" />
	    <!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
	    <property name="rejectedExecutionHandler">
	        <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
	    </property>
	</bean>

    其中,rejectedExecutionHandler有多种策略。

     默认的拒绝策略是AbortPolicy : 直接抛出异常

     DiscardPolicy:直接丢弃要执行的任务

     CallerRunsPolicy :线程池满则直接执行当前任务

     DiscardOldestPolicy :当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。

3.在需要开启线程的地方调用taskExecutor.execute(Thread);  其中Thread是自定义的线程对象。

监听器:

自定义监听:

1.定义一个类,继承ApplicationEvent。用来自定义一个监听事件。

2.定义一个类,实现ApplicationListener。泛型是自定义的监听类。这是自定义的监听器。

3.重写onApplicationEvent()方法,传参和泛型一样。

4.注入自定义的监听器。

5.applicationContext.publishEvent(new OrgEvent(this, pram));发布监听。传参则是自定义的监听事件类。

项目启动后的监听:

1.定义一个类,实现ApplicationListener<ContextRefreshedEvent>。

2.重写onApplicationEvent方法,传参和泛型一样。

这样在项目启动后会调用这个方法了。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部