diff --git a/src/main/java/org/alxkm/antipatterns/excessivesynchronization/ExcessiveSyncCounter.java b/src/main/java/org/alxkm/antipatterns/excessivesynchronization/ExcessiveSyncCounter.java index d2d9c96..69c7b51 100644 --- a/src/main/java/org/alxkm/antipatterns/excessivesynchronization/ExcessiveSyncCounter.java +++ b/src/main/java/org/alxkm/antipatterns/excessivesynchronization/ExcessiveSyncCounter.java @@ -35,4 +35,52 @@ public synchronized void decrement() { public synchronized int getCount() { return count; } + + public static void main(String[] args) { + ExcessiveSyncCounter counter = new ExcessiveSyncCounter(); + + // Create threads to perform operations on the counter + Thread incrementThread1 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.increment(); + } + }); + + Thread incrementThread2 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.increment(); + } + }); + + Thread decrementThread1 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.decrement(); + } + }); + + Thread decrementThread2 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.decrement(); + } + }); + + // Start the threads + incrementThread1.start(); + incrementThread2.start(); + decrementThread1.start(); + decrementThread2.start(); + + // Wait for all threads to complete + try { + incrementThread1.join(); + incrementThread2.join(); + decrementThread1.join(); + decrementThread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // Print the final count + System.out.println("Final count: " + counter.getCount()); + } } diff --git a/src/main/java/org/alxkm/antipatterns/excessivesynchronization/OptimizedCounter.java b/src/main/java/org/alxkm/antipatterns/excessivesynchronization/OptimizedCounter.java index 683be42..264d9d9 100644 --- a/src/main/java/org/alxkm/antipatterns/excessivesynchronization/OptimizedCounter.java +++ b/src/main/java/org/alxkm/antipatterns/excessivesynchronization/OptimizedCounter.java @@ -39,5 +39,53 @@ public int getCount() { return count; } } + + public static void main(String[] args) { + OptimizedCounter counter = new OptimizedCounter(); + + // Create threads to perform operations on the counter + Thread incrementThread1 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.increment(); + } + }); + + Thread incrementThread2 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.increment(); + } + }); + + Thread decrementThread1 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.decrement(); + } + }); + + Thread decrementThread2 = new Thread(() -> { + for (int i = 0; i < 1000; i++) { + counter.decrement(); + } + }); + + // Start the threads + incrementThread1.start(); + incrementThread2.start(); + decrementThread1.start(); + decrementThread2.start(); + + // Wait for all threads to complete + try { + incrementThread1.join(); + incrementThread2.join(); + decrementThread1.join(); + decrementThread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // Print the final count + System.out.println("Final count: " + counter.getCount()); + } }