복붙노트

[SPRING] Spring @Async 한계 스레드 수

SPRING

Spring @Async 한계 스레드 수

내 질문은이 질문과 매우 비슷하다. @Async는 다른 스레드가 끝날 때까지 스레드가 계속되는 것을 막는다.

기본적으로 더 많은 스레드에서 수백 개의 계산을 실행해야합니다. 예를 들어 병렬 스레드의 일부만 실행하려고합니다. paralell에서 5 계산 5 스레드.

나는 스프링 프레임 워크를 사용하고 @Async 옵션은 자연스러운 선택이다. 전체 기능을 갖춘 JMS 대기열이 필요하지 않습니다. 이는 저에게 약간의 오버 헤드입니다.

어떤 아이디어? 고맙습니다

해결법

  1. ==============================

    1.Task Executor를 체크 아웃 했습니까? 작업을 실행할 최대 스레드 수와 함께 스레드 풀을 정의 할 수 있습니다.

    Task Executor를 체크 아웃 했습니까? 작업을 실행할 최대 스레드 수와 함께 스레드 풀을 정의 할 수 있습니다.

    @Async와 함께 사용하려면 spring-config에서 사용하십시오.

    <task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
    
    <task:executor id="myExecutor" pool-size="5"/>
    
    <task:scheduler id="myScheduler" pool-size="10"/>
    

    전체 참조는 여기 (25.5.3). 희망이 도움이됩니다.

  2. ==============================

    2.Spring의 자바 설정을 사용한다면 설정 클래스는 AsyncConfigurer를 구현해야한다.

    Spring의 자바 설정을 사용한다면 설정 클래스는 AsyncConfigurer를 구현해야한다.

    @Configuration
    @EnableAsync
    public class AppConfig implements AsyncConfigurer {
    
        [...]
    
        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(2);
            executor.setMaxPoolSize(5);
            executor.setQueueCapacity(50);
            executor.setThreadNamePrefix("MyExecutor-");
            executor.initialize();
            return executor;
        }
    }
    

    자세한 내용은 @EnableAsync 문서를 참조하십시오. http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html

  3. from https://stackoverflow.com/questions/13206792/spring-async-limit-number-of-threads by cc-by-sa and MIT license