diff --git a/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/SingleLock.java b/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/SingleLock.java index 8a3106f650..84a82baff2 100644 --- a/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/SingleLock.java +++ b/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/SingleLock.java @@ -14,30 +14,30 @@ public class SingleLock extends ConcurrentAccessExperiment { protected synchronized Supplier putSupplier(Map map, int key) { return (()-> { - boolean done = false; try { - while(!done) { - done = lock.tryLock(); - } + lock.lock(); map.put("key" + key, "value" + key); + } catch (Exception e) { + this.putSupplier(map, key); } finally { - lock.unlock(); - } + try { + lock.unlock(); + } catch (Exception e) {} } return null; }); } protected synchronized Supplier getSupplier(Map map, int key) { return (()-> { - boolean done = false; try { - while(!done) { - done = lock.tryLock(); - } + lock.lock(); map.get("key" + key); + } catch (Exception e) { + this.getSupplier(map, key); } finally { - lock.unlock(); - } + try { + lock.unlock(); + } catch (Exception e) {} } return null; }); } diff --git a/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/StripedLock.java b/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/StripedLock.java index 77bf2de7c0..ac94de6451 100644 --- a/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/StripedLock.java +++ b/core-java-modules/core-java-concurrency-collections-2/src/main/java/com/baeldung/concurrent/lock/StripedLock.java @@ -7,23 +7,25 @@ import com.google.common.base.Supplier; import com.google.common.util.concurrent.Striped; public class StripedLock extends ConcurrentAccessExperiment { - Striped lock; + Striped stripedLock; public StripedLock(int buckets) { - lock = Striped.lock(buckets); + stripedLock = Striped.lock(buckets); } protected synchronized Supplier putSupplier(Map map, int key) { return (()-> { - Lock currentLock = lock.get("key" + key); - boolean done = false; + int bucket = key % stripedLock.size(); + Lock lock = stripedLock.get(bucket); try { - while(!done) { - done = currentLock.tryLock(); - } + lock.tryLock(); map.put("key" + key, "value" + key); + } catch (Exception e) { + this.putSupplier(map, key); } finally { - currentLock.unlock(); + try { + lock.unlock(); + } catch (Exception e) {} } return null; }); @@ -31,15 +33,17 @@ public class StripedLock extends ConcurrentAccessExperiment { protected synchronized Supplier getSupplier(Map map, int key) { return (()-> { - Lock currentLock = lock.get("key" + key); - boolean done = false; + int bucket = key % stripedLock.size(); + Lock lock = stripedLock.get(bucket); try { - while(!done) { - done = currentLock.tryLock(); - } + lock.tryLock(); map.get("key" + key); + } catch (Exception e) { + this.getSupplier(map, key); } finally { - currentLock.unlock(); + try { + lock.unlock(); + } catch (Exception e) {} } return null; });