2012-11-03 14 views
10

Moje pytanie jest bardzo podobny do tego: @Async prevent a thread to continue until other thread have finishedWiosna @Async ograniczanie liczby wątków

Zasadniczo muszę prowadzone ~ setki obliczeń w kilku wątkach. Chcę uruchomić tylko kilka równoległych wątków, np. 5 wątków z 5 obliczeniami w równolegle.

Korzystam z platformy wiosennej i opcja @Aync jest naturalnym wyborem. Nie potrzebuję w pełni funkcjonalnej kolejki JMS, która jest dla mnie trochę zbyteczna.

Wszelkie pomysły? Dziękujemy

Odpowiedz

12

Czy wymeldowałeś się Task Executor? Możesz zdefiniować pulę wątków z maksymalną liczbą wątków do wykonania zadań.

Jeśli chcesz używać go z @Async, to wykorzystać w swojej wiosenno-config:

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/> 

<task:executor id="myExecutor" pool-size="5"/> 

<task:scheduler id="myScheduler" pool-size="10"/> 

Pełna odniesienie here (25.5.3). Mam nadzieję że to pomoże.

16

Jeśli używasz Java konfigurację Wiosny, klasa config musi implementuje 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; 
    } 
} 

Zobacz @EnableAsync dokumentację po więcej szczegółów: http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html

+0

Co zrobić wiele asyncs? – Dejell

+0

Możesz opisać kilka metod za pomocą '@ Async', a oni udostępnią pulę wątków/executor zdefiniowaną przez konfigurację' @ EnableAsync'. – Siggen

+0

Mam na myśli - kilka executorów o różnych konfiguracjach dla każdego – Dejell

Powiązane problemy