ThreadPoolTask​​Executor为每个新请求创建新的threadPool

时间:2017-10-27 11:33:05

标签: java spring multithreading concurrency

我们在weblogic服务器上部署了一个spring应用程序。我们的项目中有一个REST Web服务。这是一个POST电话。在这个Web服务的请求主体中,有一个名字。当我们调用我们的web服务时,它在内部使用RestTemplate调用其他web服务。

现在我们需要在每个请求中传递10个以上的名称,然后我们的Web服务应该调用其他Web服务10次。我们需要使它成为多线程调用。

所以我们使用的是ThreadPoolTask​​Executor。以下是相同的代码。

<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="3"></property>
    <property name="maxPoolSize" value="4"></property>
    <property name="WaitForTasksToCompleteOnShutdown" value="true">
    </property>
</bean>

public class ApplicationDirectorImpl{

    @Autowired
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;

    ....
    ....

    public CustomResponseObject method(){

    ....
    ....

        List<Future<FutureCustomResponse>> fList = new ArrayList<Future<FutureCustomResponse>>();

        for(String name : nameList){
            Future<FutureCustomResponse> fut = threadPoolTaskExecutor.submit(new Task(name));
            fList.add(fut);
        }

        for(Future f: fList){
            FutureCustomResponse fuResponse = f.get();
        }
    }
}

public class Task implements Callable<FutureCustomResponse>{
    private String name;

    public call() throws Exception{
        System.out.println("name" + name + " performed by " + Thread.currentThread().getName());
        return NameBuild.getPersonalInfo(this.name);
    }
}

现在,当一个请求带有5个名称时,它应由这3个线程提供服务。

我们有2台服务器,因此我们的应用程序将有2个实例。因此,将为每个服务器创建线程池或在2个服务器之间创建公共线程池。 那么总共将创建多少个线程?每台服务器3个或每个应用3个?

0 个答案:

没有答案