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"); + } + } + +}