【发布时间】:2016-11-23 08:46:14
【问题描述】:
我目前正在使用 Spring Boot 开发一个 Web 应用程序,但我在服务层遇到了问题。
我的服务层有一个繁重的方法。如果多个用户调用相同的服务,应用程序会因内存不足而停止。所以我只想限制该方法的并行运行线程的数量。到目前为止,我已经在该方法上使用了 synchronized。但它会将其限制为单线程方法。
@Service
public class DocumentService{
private synchronized void doReplacement(){
//should have limited no of multi threads (eg. 3)
}
private void normalMethod(){
//no restrictions
}
}
我能做些什么来完成这项任务。任何帮助将不胜感激。
【问题讨论】:
-
你可以创建和使用 Executor 来限制线程数。 BTW 先检查有没有内存泄漏......
-
由于spring框架在服务层创建了所有线程,我无法手动处理线程。有办法吗??
-
解决此问题的常用方法是将您的服务包装在服务提供者中。提供者使用计数信号量来确保不超过 X 个事物的实例存在,并阻止请求它的线程。另一种选择是更改 tomcat 配置(如果您在内部使用 tomcat)以限制它将为每个请求处理的并发线程数,但这可能会对您的应用程序的其余部分产生连锁反应。
-
@christopher 可以举个例子吗?
标签: java spring multithreading spring-mvc spring-boot