在Spring Boot服务上运行有限数量的线程
我目前正在使用Spring Boot" title="Spring Boot">Spring Boot开发Web应用程序,并且服务层存在问题。
我在服务层上使用了繁重的方法。如果多个用户调用同一服务,则由于内存不足,应用程序将停止。所以我只想限制该方法的并行运行线程数。到目前为止,我已经在该方法上使用了
。但是它将限制为单线程方法。
@Servicepublic class DocumentService{
private synchronized void doReplacement(){
//should have limited no of multi threads (eg. 3)
}
private void normalMethod(){
//no restrictions
}
}
我该怎么做才能完成这项任务。任何帮助,将不胜感激。
回答:
使用某种类型的请求限制(即每秒请求数)可能比同时执行一个方法的线程数更好。例如,直接使用Guava的RateLimiter,或者事件添加对Spring
AOP的声明性支持。
如果您仍然想使用线程,我的建议是使用ExecutorService:
@Servicepublic class DocumentService {
private final ExecutorService executor;
@Autowired
public DocumentService(
@Value("${some.config.property}") int maxConcurrentThreads) {
// will allow only the given number of threads
executor = Executors.newFixedThreadPool(maxConcurrentThreads);
}
private void doReplacementWithLimitedConcurrency(String s, int i){
Future<?> future = executor.submit(() -> doReplacement(s, i));
future.get(); // will block until a thread picks up the task
// and finishes executing doReplacement
}
private void doReplacement(String s, int i){
}
// other methods
@PreDestroy
public void performThreadPoolCleanup() throws Exception {
executor.shutdown();
executor.awaitTermination(10, TimeUnit.SECONDS);
executor.shutdownNow();
}
}
以上是 在Spring Boot服务上运行有限数量的线程 的全部内容, 来源链接: utcz.com/qa/413476.html