aboutsummaryrefslogtreecommitdiff
path: root/server-core/src/main/java/com/juick/util
diff options
context:
space:
mode:
authorGravatar Alexander Alexeev2016-11-13 21:21:45 +0700
committerGravatar Alexander Alexeev2016-11-13 21:21:45 +0700
commit6ba7eb5fe1384ec87cdd0031d185a9b26512a016 (patch)
tree1448ba6c8dda4302e3ad847cb085d49b8b054867 /server-core/src/main/java/com/juick/util
parentb75258ee5ed84510579050b5dba1edb904a09dfa (diff)
server core module
Diffstat (limited to 'server-core/src/main/java/com/juick/util')
-rw-r--r--server-core/src/main/java/com/juick/util/ThreadHelper.java36
1 files changed, 36 insertions, 0 deletions
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();
+ }
+ }
+}