一個例子說明白 spring @Autowired @PostConstruct @Service 多執行緒
阿新 • • 發佈:2020-07-08
閒話省略
spring-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 包路徑掃描 --> <context:component-scan base-package="com.adao.spring.xmlconfig" /> <!-- Spring執行緒池 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心執行緒數 --> <propertyname="corePoolSize" value="5" /> <!-- 執行緒池維護執行緒的最大數量 --> <property name="maxPoolSize" value="10" /> <!-- 允許的空閒時間, 預設60秒 --> <property name="keepAliveSeconds" value="60" /> <!-- 任務佇列 --> <property name="queueCapacity" value="50" /> <!-- 執行緒超過空閒時間限制,均會退出直到執行緒數量為0 --> <property name="allowCoreThreadTimeOut" value="true" /> <property name="WaitForTasksToCompleteOnShutdown" value="true" /> <!-- 對拒絕task的處理策略 --> <property name="rejectedExecutionHandler"> <bean class="java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy" /> </property> </bean> </beans>
app
package com.adao.spring.xmlconfig; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("Spring-Config.xml"); } }
AdaoTask
package com.adao.spring.xmlconfig; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; //@Component @Service public class AdaoTask { @Autowired private ThreadPoolTaskExecutor executor; @PostConstruct public void testAsycTask() { for (int i = 0; i < 10; i++) { executor.execute(new Runnable() { public void run() { adaoTask(); } }); } } private void adaoTask(){ System.out.println( "Thread Name :" + Thread.currentThread().getName()); } }
@Component 和@Service可以切換
執行結果:
perfect.
轉載請註明出處。