Spring線程池和監聽器的使用

線程池:java

1.定義一個類,實現Runnable接口,並重寫run()方法。spring

2.注入線程池的配置。app

<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有多種策略。this

     默認的拒絕策略是AbortPolicy : 直接拋出異常線程

     DiscardPolicy:直接丟棄要執行的任務code

     CallerRunsPolicy :線程池滿則直接執行當前任務xml

     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方法,傳參和泛型同樣。

這樣在項目啓動後會調用這個方法了。

相關文章
相關標籤/搜索