Мне нужно реализовать многопоточный фоновый процесс. Мой проект - весна, спящий режим, который я пытался
с кодом ниже, который использует org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor для
выполните приведенную ниже операцию фона в многопоточном режиме. Мне нужно знать, почему мой
количество потоков всегда 1?
public class UserUpdateProcessor implements InitializingBean {
private ThreadPoolTaskExecutor executor;
public void afterPropertiesSet() throws Exception {
for(int i = 0; i < 10) //added this like after the 1st reply
executor.execute(new UserBackgorundRunner ());
}
}
private class UserBackgorundRunner extends Thread {
public UserBackgorundRunner() {
this.setDaemon(true);
this.setPriority(MIN_PRIORITY);
}
public void run() {
List<User> users = getUserList();;
for (User user : users) {
try {
log.debug("Active count :::::::::::::::::::::::::::::"+executor.getActiveCount());
upgradeUserInBackground(user);
} catch (Exception e) {
LOGGER.warn("Fail to upgrade user");
}
}
}
My spring.xml looks like
<bean id="userThreadPool"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize"><value>10</value></property>
<property name="maxPoolSize"><value>15</value></property>
<property name="queueCapacity"><value>50</value></property>
</bean>
<bean id="userProcessor" class="com.user.UserUpdateProcessor"
autowire="byType">
<property name="executor" ref="userThreadPool" />
</bean>
Это всегда один, потому что вы только когда - либо представить единую Thread
на ThreadPoolTaskExecutor
.
Spring InitializingBean
(JavaDoc ссылка) метод afterPropertiesSet()
вызывается только один раз в жизни приложений, и, насколько я могу сказать на примере вы предоставили, то есть единственное представление Thread
на свой ThreadPoolTaskExecutor
.