From f3537acf6b7e7e2b4d90f1a21ec9ad841dc23dae Mon Sep 17 00:00:00 2001 From: IgorNB Date: Wed, 2 Oct 2019 12:52:46 +0300 Subject: [PATCH 1/3] SemaPhoreDemo double acquire fix tryAcquire() already acquires a permit, if one is available (no need to call acquire() after it) --- .../java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java index 3a1d8555d3..211ae78c1f 100644 --- a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java @@ -12,7 +12,6 @@ public class SemaPhoreDemo { System.out.println("Number of threads waiting to acquire: " + semaphore.getQueueLength()); if (semaphore.tryAcquire()) { - semaphore.acquire(); // perform some critical operations semaphore.release(); } From efb631f0176e7179212c9d98d5a70a24e901ace2 Mon Sep 17 00:00:00 2001 From: IgorNB Date: Wed, 2 Oct 2019 19:55:06 +0300 Subject: [PATCH 2/3] safe semaphore.release in finally block --- .../com/baeldung/concurrent/semaphore/SemaPhoreDemo.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java index 211ae78c1f..153853a5b8 100644 --- a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java @@ -11,9 +11,12 @@ public class SemaPhoreDemo { System.out.println("Available permit : " + semaphore.availablePermits()); System.out.println("Number of threads waiting to acquire: " + semaphore.getQueueLength()); - if (semaphore.tryAcquire()) { + if (semaphore.tryAcquire()) + try { // perform some critical operations - semaphore.release(); + } finally { + semaphore.release(); + } } } From 7f51ae04c015d47b3bb4bbab0500192bdde9de93 Mon Sep 17 00:00:00 2001 From: IgorNB Date: Wed, 2 Oct 2019 19:56:19 +0300 Subject: [PATCH 3/3] Update SemaPhoreDemo.java --- .../java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java index 153853a5b8..43261e5ee4 100644 --- a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java @@ -11,7 +11,7 @@ public class SemaPhoreDemo { System.out.println("Available permit : " + semaphore.availablePermits()); System.out.println("Number of threads waiting to acquire: " + semaphore.getQueueLength()); - if (semaphore.tryAcquire()) + if (semaphore.tryAcquire()) { try { // perform some critical operations } finally {