Layrs Logo
Layrs
Back to Dashboard
HLD Course LLD Course New
Modules
Classes and Objects in OOP Explained Enums in OOP: Use Cases & Best Practices Interfaces in OOP: When & How to Use Them Encapsulation in OOP: Definition & Examples Abstraction in OOP: Concepts & Interview Guide Inheritance in OOP: Types & Interview Guide Polymorphism in OOP: Runtime vs Compile-Time Abstract Classes vs Interfaces in OOP Method Overloading vs Overriding in OOP
Association in OOP: Object Relationships Guide Aggregation in OOP: Has-A Relationship Explained Composition in OOP: Strong Has-A Relationship Dependency in OOP: Uses-A Relationship Guide
DRY Principle: Don't Repeat Yourself in Code YAGNI Principle: You Aren't Gonna Need It KISS Principle: Keep It Simple in Software Design Single Responsibility Principle (SRP) Explained Open-Closed Principle (OCP): Extend, Don't Modify Liskov Substitution Principle (LSP) Explained Interface Segregation Principle (ISP) Explained Dependency Inversion Principle (DIP) Explained Composition over Inheritance: When and Why Law of Demeter: Principle of Least Knowledge Cohesion and Coupling in Software Design Thread Safety in OOP: Locks, Sync & Patterns
Singleton Pattern: Ensure One Instance Factory Method Pattern: Creational Design Guide Abstract Factory Pattern: Guide & Examples Builder Pattern: Creational Design Guide Prototype Pattern: Clone Objects Efficiently Adapter Pattern: Structural Design Guide Bridge Pattern: Decouple Abstraction from Implementation Composite Pattern: Tree Structure Design Guide Decorator Pattern: Add Behavior Dynamically Facade Pattern: Simplify Complex Subsystems Flyweight Pattern: Memory Optimization Design Proxy Pattern: Control Object Access in OOP Iterator Pattern: Traverse Collections in OOP Observer Pattern: Event-Driven Design Guide Strategy Pattern: Swap Algorithms at Runtime Command Pattern: Behavioral Design Guide State Pattern: Manage Object State Transitions Template Method Pattern: Define Algorithm Skeleton Visitor Pattern: Add Operations Without Changing Classes Mediator Pattern: Reduce Object Coupling Memento Pattern: Undo/Redo State Management Chain of Responsibility Pattern Explained Interpreter Pattern: Parse Grammars in OOP
Class Diagrams in UML: Notation & Examples Use Case Diagrams in UML: Guide & Examples Sequence Diagrams in UML: Guide & Examples Activity Diagrams in UML: Guide & Examples State Machine Diagrams in UML Explained
Deadlock, Livelock & Starvation in Java Producer-Consumer Problem: Java Thread Solution Synchronization in Java: Locks & Monitors Guide Threads vs Processes: Key Differences Explained Thread Pools in Java: ExecutorService Guide Volatile vs Atomic Variables: Java Concurrency Guide
Sign In Dashboard
Layrs Logo
Layrs
Back to Dashboard
HLD Course LLD Course New
Modules
Classes and Objects in OOP Explained Enums in OOP: Use Cases & Best Practices Interfaces in OOP: When & How to Use Them Encapsulation in OOP: Definition & Examples Abstraction in OOP: Concepts & Interview Guide Inheritance in OOP: Types & Interview Guide Polymorphism in OOP: Runtime vs Compile-Time Abstract Classes vs Interfaces in OOP Method Overloading vs Overriding in OOP
Association in OOP: Object Relationships Guide Aggregation in OOP: Has-A Relationship Explained Composition in OOP: Strong Has-A Relationship Dependency in OOP: Uses-A Relationship Guide
DRY Principle: Don't Repeat Yourself in Code YAGNI Principle: You Aren't Gonna Need It KISS Principle: Keep It Simple in Software Design Single Responsibility Principle (SRP) Explained Open-Closed Principle (OCP): Extend, Don't Modify Liskov Substitution Principle (LSP) Explained Interface Segregation Principle (ISP) Explained Dependency Inversion Principle (DIP) Explained Composition over Inheritance: When and Why Law of Demeter: Principle of Least Knowledge Cohesion and Coupling in Software Design Thread Safety in OOP: Locks, Sync & Patterns
Singleton Pattern: Ensure One Instance Factory Method Pattern: Creational Design Guide Abstract Factory Pattern: Guide & Examples Builder Pattern: Creational Design Guide Prototype Pattern: Clone Objects Efficiently Adapter Pattern: Structural Design Guide Bridge Pattern: Decouple Abstraction from Implementation Composite Pattern: Tree Structure Design Guide Decorator Pattern: Add Behavior Dynamically Facade Pattern: Simplify Complex Subsystems Flyweight Pattern: Memory Optimization Design Proxy Pattern: Control Object Access in OOP Iterator Pattern: Traverse Collections in OOP Observer Pattern: Event-Driven Design Guide Strategy Pattern: Swap Algorithms at Runtime Command Pattern: Behavioral Design Guide State Pattern: Manage Object State Transitions Template Method Pattern: Define Algorithm Skeleton Visitor Pattern: Add Operations Without Changing Classes Mediator Pattern: Reduce Object Coupling Memento Pattern: Undo/Redo State Management Chain of Responsibility Pattern Explained Interpreter Pattern: Parse Grammars in OOP
Class Diagrams in UML: Notation & Examples Use Case Diagrams in UML: Guide & Examples Sequence Diagrams in UML: Guide & Examples Activity Diagrams in UML: Guide & Examples State Machine Diagrams in UML Explained
Deadlock, Livelock & Starvation in Java Producer-Consumer Problem: Java Thread Solution Synchronization in Java: Locks & Monitors Guide Threads vs Processes: Key Differences Explained Thread Pools in Java: ExecutorService Guide Volatile vs Atomic Variables: Java Concurrency Guide
Sign In Dashboard
Layrs
  1. Course
  2. LLD
  3. 06-concurrency-and-threading

06-concurrency-and-threading

6 topics

Deadlock, Livelock & Starvation in Java

Concurrency hazards - deadlock conditions and prevention, livelock vs deadlock, thread starvation causes and mitigation

Producer-Consumer Problem: Java Thread Solution

Classic concurrency pattern - bounded buffers, blocking queues, condition variables, and real-world applications

Synchronization in Java: Locks & Monitors Guide

Coordinating access to shared resources - locks, mutexes, semaphores, reentrant locks, and read-write locks

Threads vs Processes: Key Differences Explained

Differences between threads and processes - memory sharing, creation cost, use cases, and when to choose each

Thread Pools in Java: ExecutorService Guide

Managing thread lifecycle efficiently - fixed vs cached pools, work stealing, executor frameworks, and sizing strategies

Volatile vs Atomic Variables: Java Concurrency Guide

Volatile ensures memory visibility; atomic variables enable lock-free thread safety with CAS. Learn when to use each, with Java examples for concurrent programming interviews.