Here’s how to use CompletableFuture to run a task asynchronously in Java.
import java.util.concurrent.CompletableFuture; import java.util.concurrent.ForkJoinPool; import java.util.logging.Level; import java.util.logging.Logger; import static java.util.concurrent.TimeUnit.SECONDS; public class AsyncTask { private static final Logger LOGGER = Logger.getLogger(AsyncTask.class.getName()); public static void main(String[] args) { CompletableFuture.runAsync(AsyncTask::task); LOGGER.info("Message from the main thread. Note that this message is logged before the async task ends."); LOGGER.info("Waiting for the async task to end."); boolean isQuiecent = ForkJoinPool.commonPool().awaitQuiescence(5, SECONDS); if (isQuiecent) { LOGGER.info("Async task ended."); } else { LOGGER.log(Level.SEVERE, "The async task is taking too long to finish. This program will end anyway."); } } private static void task() { LOGGER.info("Async task starting. This message is logged by the async task thread"); try { Thread.sleep(1000); LOGGER.info("Async task is ending. This message is logged by the async task thread"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); LOGGER.log(Level.SEVERE, "The async task thread was interrupted.", e); } } }
If you have any questions, leave a comment or ask me on my social media.