diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-23 11:34:42 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-23 11:34:42 -0500 |
| commit | d5a1ec8b54c1c3c516d07f1916276cd6e5a937e4 (patch) | |
| tree | 34f4ed7975803f573d16a7215ae39a9b2791a9b9 /src/main/java/derms/util | |
| parent | e3df4a078afd37314d330daa2de0883f8dd1811b (diff) | |
| download | soen423-d5a1ec8b54c1c3c516d07f1916276cd6e5a937e4.zip | |
runicast: use DatagramChannel
Diffstat (limited to 'src/main/java/derms/util')
| -rw-r--r-- | src/main/java/derms/util/ThreadPool.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/main/java/derms/util/ThreadPool.java b/src/main/java/derms/util/ThreadPool.java index 33588ff..ccd3afa 100644 --- a/src/main/java/derms/util/ThreadPool.java +++ b/src/main/java/derms/util/ThreadPool.java @@ -8,7 +8,26 @@ import java.util.logging.Logger; public class ThreadPool { public static final Duration timeout = Duration.ofSeconds(1); - public static void shutDown(ExecutorService pool, Logger log) { + public static void shutdown(ExecutorService pool, Logger log) { + pool.shutdown(); + try { + // Wait for existing threads to stop. + if (!pool.awaitTermination(timeout.toMillis(), TimeUnit.MILLISECONDS)) { + log.warning("Thread pool did not terminate after " + timeout + ". Forcefully shutting down..."); + pool.shutdownNow(); // Cancel running tasks. + // Wait for tasks to stop. + if (!pool.awaitTermination(timeout.toMillis(), TimeUnit.MILLISECONDS)) + log.warning("Thread pool did not terminate after " + timeout); + } + } catch (InterruptedException e) { + // (Re-)Cancel if current thread also interrupted. + pool.shutdownNow(); + // Preserve interrupt status. + Thread.currentThread().interrupt(); + } + } + + public static void shutdownNow(ExecutorService pool, Logger log) { pool.shutdownNow(); try { if (!pool.awaitTermination(timeout.toMillis(), TimeUnit.MILLISECONDS)) |