在REST控制器java中创建多个线程的影响



我有一个REST控制器类。在这个类中有一个方法,它必须并行执行两个独立的服务,如下所示-

@GetMapping("/hello")
public String getResult(){
//Call service 1
// Call service 2
// Combine the result and return
}

由于这两个服务可以独立执行,所以我们在固定线程池中创建两个线程并并行执行它们。现在我的问题是,由于我的REST API同时被成千上万的用户调用,这意味着我的代码将创建1000*2个线程?或者它将只创建2个线程并与多个servlet线程共享?

我假设ThreadPool是在应用程序级别的方法之外定义的。这是正确的做法。因此,在整个应用程序中将有两个工作线程(一个JVM实例(。

现在假设您同时收到来自用户的1000个请求。然后,您的应用程序将创建1000个HTTP线程。这1000个HTTP线程将争夺您在Executor线程池中定义的两个工作线程。因此,它将阻塞应用程序。响应时间将越来越高,因为HTTP线程将等待,直到他们有权访问线程池。最终它会占用应用程序的资源。

因此,您需要相应地增加线程池的大小。

最新更新