From 6ba7eb5fe1384ec87cdd0031d185a9b26512a016 Mon Sep 17 00:00:00 2001 From: Alexander Alexeev Date: Sun, 13 Nov 2016 21:21:45 +0700 Subject: server core module --- .../src/main/java/com/juick/util/ThreadHelper.java | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 server-core/src/main/java/com/juick/util/ThreadHelper.java (limited to 'server-core/src/main/java/com/juick/util') diff --git a/server-core/src/main/java/com/juick/util/ThreadHelper.java b/server-core/src/main/java/com/juick/util/ThreadHelper.java new file mode 100644 index 00000000..7304d158 --- /dev/null +++ b/server-core/src/main/java/com/juick/util/ThreadHelper.java @@ -0,0 +1,36 @@ +package com.juick.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * Created by aalexeev on 11/11/16. + */ +public class ThreadHelper { + private ThreadHelper() { + throw new IllegalStateException(); + } + + private static Logger logger = LoggerFactory.getLogger(ThreadHelper.class); + + public static void shutdownAndAwaitTermination(ExecutorService pool) { + pool.shutdown(); // Disable new tasks from being submitted + try { + // Wait a while for existing tasks to terminate + if (!pool.awaitTermination(5, TimeUnit.SECONDS)) { + pool.shutdownNow(); // Cancel currently executing tasks + // Wait a while for tasks to respond to being cancelled + if (!pool.awaitTermination(5, TimeUnit.SECONDS)) + logger.error("Pool did not terminate"); + } + } catch (InterruptedException ie) { + // (Re-)Cancel if current thread also interrupted + pool.shutdownNow(); + // Preserve interrupt status + Thread.currentThread().interrupt(); + } + } +} -- cgit v1.2.3