From 35c0ef7f14b5b7f34e35efbc09e02c500df1da51 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Sun, 1 Dec 2019 13:25:55 +0530 Subject: [PATCH] BAEL-3525: System.exit() vs Runtime.getRuntime().halt() --- .../exitvshalt/JvmExitAndHaltDemo.java | 34 +++++++++++++++++++ .../exitvshalt/JvmExitDemoUnitTest.java | 14 ++++++++ .../exitvshalt/JvmHaltDemoUnitTest.java | 14 ++++++++ 3 files changed, 62 insertions(+) create mode 100644 core-java-modules/core-java-jvm/src/main/java/com/baeldung/exitvshalt/JvmExitAndHaltDemo.java create mode 100644 core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmExitDemoUnitTest.java create mode 100644 core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmHaltDemoUnitTest.java diff --git a/core-java-modules/core-java-jvm/src/main/java/com/baeldung/exitvshalt/JvmExitAndHaltDemo.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/exitvshalt/JvmExitAndHaltDemo.java new file mode 100644 index 0000000000..6d572455fb --- /dev/null +++ b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/exitvshalt/JvmExitAndHaltDemo.java @@ -0,0 +1,34 @@ +package com.baeldung.exitvshalt; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class JvmExitAndHaltDemo { + + private static Logger LOGGER = LoggerFactory.getLogger(JvmExitAndHaltDemo.class); + + static { + Runtime.getRuntime() + .addShutdownHook(new Thread(() -> { + LOGGER.info("Shutdown hook initiated."); + })); + } + + public void processAndExit() { + process(); + LOGGER.info("Calling System.exit()."); + System.exit(0); + } + + public void processAndHalt() { + process(); + LOGGER.info("Calling Runtime.getRuntime().halt()."); + Runtime.getRuntime() + .halt(0); + } + + private void process() { + LOGGER.info("Process started."); + } + +} diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmExitDemoUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmExitDemoUnitTest.java new file mode 100644 index 0000000000..0c50651af0 --- /dev/null +++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmExitDemoUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.exitvshalt; + +import org.junit.Test; + +public class JvmExitDemoUnitTest { + + JvmExitAndHaltDemo jvmExitAndHaltDemo = new JvmExitAndHaltDemo(); + + @Test + public void givenProcessComplete_whenExitCalled_thenTriggerShutdownHook() { + jvmExitAndHaltDemo.processAndExit(); + } + +} diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmHaltDemoUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmHaltDemoUnitTest.java new file mode 100644 index 0000000000..9f08e95c6a --- /dev/null +++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/exitvshalt/JvmHaltDemoUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.exitvshalt; + +import org.junit.Test; + +public class JvmHaltDemoUnitTest { + + JvmExitAndHaltDemo jvmExitAndHaltDemo = new JvmExitAndHaltDemo(); + + @Test + public void givenProcessComplete_whenHaltCalled_thenDoNotTriggerShutdownHook() { + jvmExitAndHaltDemo.processAndHalt(); + } + +}