Why is Synchronization Needed ?
About
1. Avoid Race Conditions
What is a Race Condition?
Example Without Synchronization (Race Condition)
class Counter {
private int count = 0;
void increment() {
count++; // Not atomic, can cause issues
}
int getCount() {
return count;
}
}
public class RaceConditionExample {
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
counter.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
counter.increment();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Final Count: " + counter.getCount()); // Expected: 20000, but might be less!
}
}Problem
Fix Using Synchronization
2. Ensure Data Consistency
What is Data Inconsistency?
Example Without Synchronization (Inconsistent Data)
Problem
Fix Using Synchronization
3. Maintain Order of Execution
What is Execution Order Issue?
Example Without Synchronization (Out-of-Order Execution)
Problem
Fix Using Synchronization
4. Prevent Deadlocks and Starvation
Deadlock
Example of Deadlock
Problem
Fix: Avoid Nested Locks & Use Try-Lock
Last updated