diff --git a/my-framework/was-practice/src/main/java/org/example/counter/Counter.java b/my-framework/was-practice/src/main/java/org/example/counter/Counter.java new file mode 100644 index 00000000..a52887d4 --- /dev/null +++ b/my-framework/was-practice/src/main/java/org/example/counter/Counter.java @@ -0,0 +1,28 @@ +package org.example.counter; + +public class Counter implements Runnable { + private int count = 0; + + public void increment() { + count++; + } + + public void decrement() { + count--; + } + + public int getValue() { + return count; + } + + @Override + public void run() { + synchronized (this) { + this.increment(); + System.out.println("Value for Thread After increment " + Thread.currentThread().getName() + " " + this.getValue()); + + this.decrement(); + System.out.println("Value for Thread at Last " + Thread.currentThread().getName() + " " + this.getValue()); + } + } +} diff --git a/my-framework/was-practice/src/main/java/org/example/counter/RaceConditionDemo.java b/my-framework/was-practice/src/main/java/org/example/counter/RaceConditionDemo.java new file mode 100644 index 00000000..e6940019 --- /dev/null +++ b/my-framework/was-practice/src/main/java/org/example/counter/RaceConditionDemo.java @@ -0,0 +1,15 @@ +package org.example.counter; + +public class RaceConditionDemo { + + public static void main(String[] args) { + Counter counter = new Counter(); + Thread t1 = new Thread(counter, "Thread-1"); + Thread t2 = new Thread(counter, "Thread-2"); + Thread t3 = new Thread(counter, "Thread-3"); + + t1.start(); + t2.start(); + t3.start(); + } +}