From 31ddc6a45dc01d066b0000fd616084ba4a33a374 Mon Sep 17 00:00:00 2001 From: mobin Date: Sat, 15 Jan 2022 16:37:28 +0530 Subject: [PATCH] Move arrive and wait after thread sleep and detailed logging --- .../baeldung/concurrent/phaser/LongRunningAction.java | 9 +++++++-- .../com/baeldung/concurrent/phaser/PhaserUnitTest.java | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java index dd1487b5cb..c022c02085 100644 --- a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java +++ b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java @@ -16,12 +16,17 @@ class LongRunningAction implements Runnable { public void run() { System.out.println("This is phase " + ph.getPhase()); System.out.println("Thread " + threadName + " before long running action"); - ph.arriveAndAwaitAdvance(); + try { - Thread.sleep(20); + Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } + + System.out.println("Thread " + threadName + " action completed and waiting for others"); + ph.arriveAndAwaitAdvance(); + System.out.println("Thread " + threadName + " proceeding in phase " + ph.getPhase()); + ph.arriveAndDeregister(); } } \ No newline at end of file diff --git a/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java b/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java index a7b56e1151..88c18b5149 100644 --- a/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java +++ b/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java @@ -26,13 +26,20 @@ public class PhaserUnitTest { executorService.submit(new LongRunningAction("thread-3", ph)); //then + System.out.println("Thread " + Thread.currentThread().getName() + " waiting for others"); ph.arriveAndAwaitAdvance(); + System.out.println("Thread " + Thread.currentThread().getName() + " proceeding in phase " + ph.getPhase()); + assertEquals(1, ph.getPhase()); //and executorService.submit(new LongRunningAction("thread-4", ph)); executorService.submit(new LongRunningAction("thread-5", ph)); + + System.out.println("Thread " + Thread.currentThread().getName() + " waiting for others"); ph.arriveAndAwaitAdvance(); + System.out.println("Thread " + Thread.currentThread().getName() + " proceeding in phase " + ph.getPhase()); + assertEquals(2, ph.getPhase());