From 1c24e0a2cfcd239199a34d45b4a2ee92caa00a98 Mon Sep 17 00:00:00 2001 From: Tomasz Sobala Date: Fri, 28 Apr 2017 10:34:28 +0200 Subject: [PATCH] [BAEL-820] Difference between wait() and sleep() in Java (#1708) * injecting beans * XML-based configuration replaced with Java Config. * [BAEL-431] Exploring TestRestTemplate. * Revert of evaluation task "XML-based configuration replaced with Java Config." This reverts commit 66471cf0574c85f8ff514ec4caf5ba44ebba1a74. * Revert of evaluation task "injecting beans" This reverts commit d2ac20185e636245bc0ae0b4ccb952965de88e28. * [BAEL-431] fix to the tests in TestRestTemplateBasicLiveTest. * [BAEL-431] added more meaningful user and password for auth. * [BAEL-820] examples of wait() and sleep() methods. * [BAEL-820] wait() and sleep() examples. --- .../concurrent/sleepwait/ThreadA.java | 21 +++++++++++++++++ .../concurrent/sleepwait/ThreadB.java | 20 ++++++++++++++++ .../sleepwait/WaitSleepExample.java | 23 +++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java create mode 100644 core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java create mode 100644 core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java new file mode 100644 index 0000000000..b19bc3fe1a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java @@ -0,0 +1,21 @@ +package com.baeldung.concurrent.sleepwait; + +/*** + * Example of waking up a waiting thread + */ +public class ThreadA { + private static final ThreadB b = new ThreadB(); + + public static void main(String... args) throws InterruptedException { + b.start(); + + synchronized (b) { + while (b.sum == 0) { + System.out.println("Waiting for ThreadB to complete..."); + b.wait(); + } + + System.out.println("ThreadB has completed. Sum from that thread is: " + b.sum); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java new file mode 100644 index 0000000000..1fc180a5de --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java @@ -0,0 +1,20 @@ +package com.baeldung.concurrent.sleepwait; + +/*** + * Example of waking up a waiting thread + */ +class ThreadB extends Thread { + int sum; + + @Override + public void run() { + synchronized (this) { + int i = 0; + while (i < 100000) { + sum += i; + i++; + } + notify(); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java new file mode 100644 index 0000000000..e84fe29d87 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java @@ -0,0 +1,23 @@ +package com.baeldung.concurrent.sleepwait; + +/*** + * Example of wait() and sleep() methods + */ +public class WaitSleepExample { + private static final Object LOCK = new Object(); + + public static void main(String... args) throws InterruptedException { + sleepWaitInSyncronizedBlocks(); + } + + private static void sleepWaitInSyncronizedBlocks() throws InterruptedException { + Thread.sleep(1000); // called on the thread + System.out.println("Thread '" + Thread.currentThread().getName() + "' is woken after sleeping for 1 second"); + + synchronized (LOCK) { + LOCK.wait(1000); // called on the object, synchronization required + System.out.println("Object '" + LOCK + "' is woken after waiting for 1 second"); + } + } + +}