Pessimistic vs Optimistic Locking Explai ...

Pessimistic vs Optimistic Locking Explained in Plain English

Sep 01, 2025

🔥 Java Devs: Stop Mixing These Up — Pessimistic vs Optimistic Locking Explained in Plain English

If you’ve worked on a Java app with a database, you’ve probably met The Lost Update Problem:

👥 Two users hit Save at the same time

🔄 One person’s work disappears

😬 Ouch

That’s where locking strategies come in.

And no — it’s not just “pessimistic = safe” & “optimistic = fast.”

Let’s break it down with real-world analogies ⬇️

🥊 The Core Problem — Concurrent Updates

🖥️ You open a “Customer Details” page

🖥️ Your teammate opens the same page

📞 You change the phone number

🏠 They change the address

💾 Both hit Save

❌ Without locking → last update wins → someone loses data

🔒 Pessimistic Locking — "I’m holding this, you wait"

☕ Coffee machine at the office: you stand there until your cup’s full. Nobody else gets coffee until you’re done.

Java Example:

Customer c = em.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE);

c.setPhoneNumber("1234567890");

em.persist(c);

Key points:

🔐 Locks the DB row immediately

🛑 Others wait until you finish

✅ Best for: high-conflict data, finance, inventory

⚠️ Downside: slower, risk of deadlocks

📝 Optimistic Locking — "I’ll trust you, but verify later"

🗒️ Google Docs: multiple people edit, but before saving, it checks if someone else changed it.

Java Example:

@Entity

class Customer {

@Id Long id;

String phoneNumber;

@Version int version;

}

Key points:

📊 Reads with a version number

🔄 At save → compares versions

❌ If mismatch → OptimisticLockException

✅ Best for: read-heavy systems, rare conflicts

⚠️ Downside: retries needed if conflicts happen

📊 Quick Comparison

Pessimistic Optimistic ⚡ Speed Slower Faster 🚫 Conflicts Never Possible 🎯 Use Case High-risk Read-heavy 💡 Takeaway

🔒 Pessimistic → Block now, no surprises later

📝 Optimistic → Let it flow, fix conflicts later

⚖️ Many real-world systems use both depending on the operation

Once you get this, you stop asking “Which is better?” and start asking:

👉 “Which is better for this use case?”

#Java #Hibernate #JPA #BackendDevelopment #SoftwareEngineering #ProgrammingTips #DatabaseDesign

Enjoy this post?

Buy Dhivakar T a coffee

More from Dhivakar T

PrivacyTermsReport