← Back to Questions
Java

What is CyclicBarrier in Java?

Learn What is CyclicBarrier in Java? with simple explanations, real-time examples, interview tips and practical use cases.

CyclicBarrier in Java is a synchronization utility that allows multiple threads to wait for each other at a common execution point before continuing further.

In simple words:

CyclicBarrier makes a group of threads pause and wait until all participating threads reach the barrier, after which all threads continue execution together.


Why CyclicBarrier is Important?

Modern enterprise applications require:

  • Parallel task coordination
  • Thread synchronization
  • Distributed workflow execution
  • Multi-stage processing
  • Batch computation synchronization

Real-World Analogy

Imagine:

  • A team race where all players must reach a checkpoint
  • No player can continue until everyone arrives

Checkpoint Example Flow


Thread 1 Reaches Barrier

Thread 2 Reaches Barrier

Thread 3 Reaches Barrier

      |
      v

Barrier Opens

      |
      v

All Threads Continue Together


Main Package

java.util.concurrent

How CyclicBarrier Works?

CyclicBarrier works using:

  • A fixed number of participating threads
  • Barrier synchronization point
  • await() method
  • Optional barrier action

Internal Working Flow


Barrier Created for 3 Threads

      |
      +-------> Thread 1 Calls await()

      |
      +-------> Thread 2 Calls await()

      |
      +-------> Thread 3 Calls await()

      |
      v

Barrier Opens Automatically

      |
      v

All Threads Resume


Basic CyclicBarrier Example

import java.util.concurrent.*;

public class Main {

    public static void main(
        String[] args
    ) {

        CyclicBarrier barrier =

            new CyclicBarrier(3);

        Runnable task = () -> {

            try {

                System.out.println(

                    Thread.currentThread().getName()

                    + " reached barrier"

                );

                barrier.await();

                System.out.println(

                    Thread.currentThread().getName()

                    + " crossed barrier"

                );

            }
            catch(Exception e) {

                e.printStackTrace();

            }

        };

        new Thread(task).start();
        new Thread(task).start();
        new Thread(task).start();

    }

}

Output


Thread-0 reached barrier
Thread-1 reached barrier
Thread-2 reached barrier

Thread-0 crossed barrier
Thread-1 crossed barrier
Thread-2 crossed barrier


What Happens Internally?

  • Threads call await()
  • Threads wait at barrier
  • Last arriving thread opens barrier
  • All waiting threads continue execution

Barrier Synchronization Flow


All Threads Working

      |
      v

Threads Reach Barrier

      |
      v

Threads Wait

      |
      v

Last Thread Arrives

      |
      v

Barrier Opens

      |
      v

All Threads Continue


Main Methods of CyclicBarrier

Method Purpose
await() Wait at barrier
await(timeout) Wait with timeout
reset() Resets barrier
getNumberWaiting() Returns waiting thread count
isBroken() Checks barrier status

1. await()

Makes thread wait until all participating threads arrive.


await() Flow


Thread Calls await()

      |
      v

Thread Waits at Barrier

      |
      v

All Threads Arrive

      |
      v

Thread Continues


2. await(timeout)

Waits for limited time only.


Example

barrier.await(
    5,
    TimeUnit.SECONDS
);

Timeout Flow


Thread Waiting at Barrier

      |
      v

Timeout Reached?

      |
   YES | NO
      |
      v

TimeoutException OR Continue


3. reset()

Resets barrier to initial state.


Example

barrier.reset();

What Makes CyclicBarrier "Cyclic"?

Barrier can be reused multiple times.


Reusable Barrier Flow


Threads Reach Barrier

      |
      v

Barrier Opens

      |
      v

Barrier Automatically Resets

      |
      v

Reusable for Next Cycle


Barrier Action

Optional task executed when all threads arrive.


Barrier Action Example

CyclicBarrier barrier =

    new CyclicBarrier(

        3,

        () -> {

            System.out.println(
                "All threads arrived"
            );

        }

    );

Barrier Action Flow


All Threads Arrive

      |
      v

Barrier Action Executes

      |
      v

Threads Continue


CyclicBarrier Lifecycle


Barrier Created

      |
      v

Threads Reach Barrier

      |
      v

Threads Wait

      |
      v

Barrier Opens

      |
      v

Barrier Resets Automatically


Difference Between CountDownLatch and CyclicBarrier

Feature CountDownLatch CyclicBarrier
Reusable No Yes
Main Purpose Wait for Completion Thread Coordination
Counter Counts Down Fixed Thread Count
Barrier Action No Yes

CyclicBarrier in Banking Systems

Banking applications use CyclicBarrier for:

  • Parallel transaction validation
  • Batch financial processing
  • Fraud analysis synchronization
  • Distributed reconciliation workflows

Banking Flow


Fraud Validation Thread

Risk Analysis Thread

Compliance Thread

      |
      v

All Threads Reach Barrier

      |
      v

Transaction Processing Continues


CyclicBarrier in E-Commerce Systems

E-commerce platforms use CyclicBarrier for:

  • Parallel order processing
  • Inventory synchronization
  • Shipping coordination
  • Distributed recommendation systems

E-Commerce Flow


Inventory Service Ready

Payment Service Ready

Shipping Service Ready

      |
      v

Barrier Opens

      |
      v

Order Confirmed


CyclicBarrier in Spring Boot

Spring Boot applications use CyclicBarrier for:

  • Parallel integration testing
  • Concurrent batch processing
  • Async workflow coordination
  • Distributed task synchronization

Spring Boot Example

CyclicBarrier barrier =

    new CyclicBarrier(5);

@Async
public void process() {

    barrier.await();

}

CyclicBarrier in Microservices

Microservices architectures use CyclicBarrier for:

  • Distributed orchestration
  • Parallel API coordination
  • Cloud-native synchronization
  • Multi-stage workflow execution

Microservice Flow


Service A Completes

Service B Completes

Service C Completes

      |
      v

Barrier Opens

      |
      v

Aggregated Workflow Continues


Advantages of CyclicBarrier

  • Reusable synchronization mechanism
  • Supports barrier actions
  • Improves parallel coordination
  • Simple thread synchronization
  • Useful in distributed workflows

Disadvantages

  • Improper thread count causes waiting forever
  • Blocking synchronization mechanism
  • Complex debugging in large systems
  • Barrier failure affects all waiting threads

Common Interview Mistake

Many developers think CyclicBarrier is same as CountDownLatch.

Actually:

  • CountDownLatch is one-time use.
  • CyclicBarrier is reusable.

Another Common Mistake

Many developers forget that all participating threads must call await().

Actually:

  • If one thread never reaches barrier, others wait forever.

Best Practices

  • Use correct participant count
  • Handle BrokenBarrierException properly
  • Prefer timeout-based await()
  • Use barrier actions carefully
  • Monitor blocked threads in production

Realtime Enterprise Example

Flight Search Aggregation Platform


Airline API 1 Ready

Airline API 2 Ready

Airline API 3 Ready

      |
      v

CyclicBarrier Opens

      |
      v

Combined Flight Results Returned


Related Learning Topics


Professional Interview Answer

CyclicBarrier is a synchronization utility in Java provided by the java.util.concurrent package that allows a fixed number of threads to wait for each other at a common synchronization point called a barrier before continuing execution. It works using an internal thread count, and all participating threads must call await() before the barrier opens and releases all waiting threads simultaneously. Unlike CountDownLatch, CyclicBarrier is reusable because it automatically resets after releasing threads, making it suitable for repeated synchronization cycles. CyclicBarrier also supports optional barrier actions that execute once all threads arrive at the barrier. Enterprise applications, Spring Boot systems, distributed microservices, banking platforms, cloud-native architectures, batch-processing systems, parallel computation engines, and e-commerce platforms heavily use CyclicBarrier for parallel workflow coordination, distributed task synchronization, multi-stage processing, and concurrent computation management.


Frequently Asked Questions

What is CyclicBarrier in Java?

CyclicBarrier is a synchronization utility that makes threads wait for each other at a common barrier point.

Which package contains CyclicBarrier?

java.util.concurrent

Why is it called cyclic?

Because the barrier automatically resets and can be reused multiple times.

What is the difference between CountDownLatch and CyclicBarrier?

CountDownLatch is one-time use, while CyclicBarrier is reusable.

Where is CyclicBarrier used?

Parallel processing systems, Spring Boot applications, distributed microservices, banking workflows, and concurrent enterprise applications.

Why this Java question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.