Количество потоков всегда 1 с помощью Spring ThreadPoolTaskExecutor

1

Мне нужно реализовать многопоточный фоновый процесс. Мой проект - весна, спящий режим, который я пытался

с кодом ниже, который использует 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>
  • 0
    это может помочь с использованием Executor.
Теги:
multithreading
spring

1 ответ

0
Лучший ответ

Это всегда один, потому что вы только когда - либо представить единую Thread на ThreadPoolTaskExecutor.

Spring InitializingBean (JavaDoc ссылка) метод afterPropertiesSet() вызывается только один раз в жизни приложений, и, насколько я могу сказать на примере вы предоставили, то есть единственное представление Thread на свой ThreadPoolTaskExecutor.

  • 0
    Я должен выполнить свою задачу внутри метода afterPropertySet. Вы рекомендуете добавить цикл, как указано выше, чтобы сделать его многопоточным?
  • 0
    Я не рекомендую это. Как сейчас, ваша задача действительно выполняется в фоновом режиме, и она работает одновременно с основным потоком приложения. В этом смысле вы используете многопоточность. Это действительно зависит от требований вашей задачи. Можете ли вы предоставить больше информации?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню