diff options
author | Alexander Alexeev | 2016-11-13 21:21:45 +0700 |
---|---|---|
committer | Alexander Alexeev | 2016-11-13 21:21:45 +0700 |
commit | 6ba7eb5fe1384ec87cdd0031d185a9b26512a016 (patch) | |
tree | 1448ba6c8dda4302e3ad847cb085d49b8b054867 /server-core/src/main/java/com/juick/util | |
parent | b75258ee5ed84510579050b5dba1edb904a09dfa (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.java | 36 |
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(); + } + } +} |