[英]Java- executor service shutdown at class level field
I have ExecutorService at class level. 我在班级有ExecutorService。
There is a rest point 'url'. 有一个休息点“ URL”。 So, user will call this API 'n' number of times per day.
因此,用户每天将调用此API的次数为“ n”次。
How to shutdown the executor service if I define it class level? 如果我定义了执行程序服务级别,如何关闭执行服务?
CLASS LEVEL: (not sure how to shutdown executor service) 级别:(不确定如何关闭执行程序服务)
public class A {
private final ExecutorService executorService = Executors.newFixedThreadPool(3);
@GET("/url")
public void executeParallelTask() {
try {
executorService.submit(new Runnable() {
@Override
public void run() {
}
});
}
finally {
executorService.shutdown();
executorService.awaitTermination(12,TIMEUNIT.HOURS)
}
If I shutdown executor service in finally block, when next request comes at rest point, I'm getting Thread Pool size is empty and couldn't handle the request. 如果我在finally块中关闭执行程序服务,则当下一个请求到达休息点时,我将得到线程池大小为空且无法处理该请求。
I'm aware of method level like below. 我知道下面的方法级别。
public void executeParallelTask() {
executorService.submit(new Runnable() {
@Override
public void run() {
}
});
executorService.shutdown();
executorService.awaitTermination(12, TimeUnit.HOURS)
You can do it in a shutdown hook. 您可以在关闭钩子中执行此操作。
static {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
if (executorService.isShutdown()) {
return;
}
log.debug("executorService shutting down...");
executorService.shutdown();
executorService.awaitTermination(10, TimeUnit.SECONDS);
executorService.shutdownNow();
log.debug("executorService shutdown");
} catch (Throwable e) {
log.error(e, e);
}
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.