1. 程式人生 > 實用技巧 >一個例子說明白 spring @Autowired @PostConstruct @Service 多執行緒

一個例子說明白 spring @Autowired @PostConstruct @Service 多執行緒

閒話省略

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"> <!-- 核心執行緒數 --> <property
name="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.

轉載請註明出處。