类级别字段中的Java-执行程序服务关闭

时间:2017-12-08 20:28:44

标签: java spring executorservice

我在类级别有ExecutorService。

有一个休息点'url'。因此,用户每天都会调用此API的次数。

如果我定义类级别,如何关闭执行程序服务?

CLASS LEVEL :(不确定如何关闭执行程序服务)

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)
        }

如果我在finally块中关闭执行器服务,当下一个请求到达休息点时,我的线程池大小为空,无法处理请求。

我知道方法级别如下。

public void executeParallelTask() {
    executorService.submit(new Runnable() {
        @Override
        public void run() {
        }
    });
    executorService.shutdown();
    executorService.awaitTermination(12, TimeUnit.HOURS)

1 个答案:

答案 0 :(得分:0)

您可以在关机挂钩中执行此操作。

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);
            }
        }
    });
}