線程池: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方法,傳參和泛型同樣。
這樣在項目啓動後會調用這個方法了。