SpringBoot 實現多線程


 

ThreadPoolTaskConfig.java

/**
 * 默認情況下,在創建了線程池后,線程池中的線程數為0,當有任務來之后,就會創建一個線程去執行任務,
 * 當線程池中的線程數目達到corePoolSize后,就會把到達的任務放到緩存隊列當中;
 * 當隊列滿了,就繼續創建線程,當線程數量大於等於maxPoolSize后,開始使用拒絕策略拒絕
 *
 * @author Jensen Zhan
 */
@Configuration
@EnableAsync
public class ThreadPoolTaskConfig {

    /**
     * 默認線程數
     */
    private static final int CORE_POOL_SIZE = 20;
    /**
     * 最大線程數
     */
    private static final int MAX_POOL_SIZE = 100;
    /**
     * 允許線程空閑時間(單位:默認為秒)
     */
    private static final int KEEP_ALIVE_TIME = 10;
    /**
     * 緩沖隊列大小
     */
    private static final int QUEUE_CAPACITY = 200;
    /**
     * 線程池名前綴
     */
    private static final String THREAD_NAME_PREFIX = "Async-Service-";

    @Bean
    public ThreadPoolTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(CORE_POOL_SIZE);
        executor.setMaxPoolSize(MAX_POOL_SIZE);
        executor.setQueueCapacity(QUEUE_CAPACITY);
        executor.setKeepAliveSeconds(KEEP_ALIVE_TIME);
        executor.setThreadNamePrefix(THREAD_NAME_PREFIX);
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }

}

 

ThreadService.java

/**
 * @author Jensen Zhan
 */
@Service
public class ThreadService {
    @Async
    public void sendMessage1() {
        for (int i = 0; i < 10000; i++) {
            Thread thread = Thread.currentThread();
            System.out.println(thread.getName());
        }
    }

    @Async
    public void sendMessage2() {
        for (int i = 0; i < 10000; i++) {
            Thread thread = Thread.currentThread();
            System.out.println(thread.getName());
        }
    }
}

 

 

OpenThread.java

/**
 * @author Jensen Zhan
 */
@Component
public class OpenThread implements ApplicationRunner {

    @Autowired
    private ThreadService threadService;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        threadService.sendMessage1();
        threadService.sendMessage2();
        System.out.println("end ...");
    }
}

 

然后直接運行application

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM