简体   繁体   English

类级别的Java-executor服务关闭字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM