gpt4 book ai didi

java - spring和synchronized方法保证特定数量的方法同时执行

转载 作者:行者123 更新时间:2023-11-30 08:32:44 24 4
gpt4 key购买 nike

我正在使用 Spring,我想知道 session 、类和方法是如何工作的(我有多少个类的实例以及为什么)。在我的例子中,我有一个 Component 类和一个 async 方法,该方法调用另一个内部有 ProcessBuilder 的类:

@Component
@PropertySource(value = { "classpath:application.properties" })
public class ZipAndMat {
.....
......
@Async
public void createZipAndMat(User currentUser, String originalFileName){
conversion(path, name, timeSample, timeout):
}

private void conversion(String path, String name, String timeSample, String timeout) throws Exception {
ProcessBuilder pb = new ProcessBuilder("java", "-XX:-UseParallelGC", "-Xss512k", "-jar", env.getRequiredProperty(PROPERTY_NAME_CONVERSION_PATH), path, name, timeSample, timeout);
pb.inheritIO();
Process p = pb.start();
int error = p.waitFor();
if (error !=0) {
if (p.isAlive()) {
p.destroyForcibly();
}
throw new MCRException("Error with conversion");
}
}
}

这是我的任务执行器配置:

@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(100);
executor.setQueueCapacity(100);
executor.initialize();
return executor;
}

我想控制进程数,否则服务器可能会宕机。我想知道如何使用同步来实现这一点?例如我应该执行 10 个进程,之后其他请求必须等待至少一个进程结束。也许一个愚蠢的解决方案可能是一个静态变量和一个主动等待 while(i>10) this.sleep(10000)...谢谢

最佳答案

您可以使用 spring @Async 配置池 (ThreadPoolTask​​Executor)

https://spring.io/guides/gs/async-method/

它会保证最大线程数和引入进程数。

关于java - spring和synchronized方法保证特定数量的方法同时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39955532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com