WalzoneInterview Prep
πŸ“ž Interviewing soon? Practice with a realistic AI mock phone interview β€” it calls you, then scores you. First 15 min FREE β†’

Core Java Β· Expert Β· question 79 of 100

What is a Phaser in Java? How is it used?

πŸ“• Buy this interview preparation book: 100 Core Java questions & answers β€” PDF + EPUB for $5

Phaser is a synchronization mechanism introduced in Java 7 that provides a flexible and reusable way of coordinating threads in a parallel application. A Phaser allows a set of threads to synchronize at specific points, called phases, and can be dynamically reconfigured to adjust the number of participating threads.

A Phaser maintains a current phase number and a number of registered parties (threads) that participate in synchronization. A party can register with a Phaser by calling the register() method, and can deregister itself using the deregister() method. Once a party is registered, it can synchronize with other parties by calling the arriveAndAwaitAdvance() method, which blocks until all registered parties have arrived at the current phase.

The Phaser class provides several methods that allow for dynamic configuration of the Phaser, such as bulkRegister(int parties) to register a fixed number of additional parties, and arrive() and awaitAdvance(int phase) to advance the Phaser to the next phase.

Here’s an example of how to use a Phaser to coordinate multiple threads in Java:

import java.util.concurrent.Phaser;

public class PhaserExample {
    public static void main(String[] args) {
        final int NUM_THREADS = 4;
    
        Phaser phaser = new Phaser(NUM\_THREADS);
    
        for (int i = 0; i < NUM\_THREADS; i++) {
            Thread thread = new Thread(new Task(phaser));
            thread.start();
        }
    }
    
    private static class Task implements Runnable {
        private Phaser phaser;
    
        public Task(Phaser phaser) {
            this.phaser = phaser;
            phaser.register();
        }
    
        @Override
        public void run() {
            while (true) {
                // do some work
    
                // wait for other threads to complete
                phaser.arriveAndAwaitAdvance();
            }
        }
    }
}

In this example, we create a Phaser with 4 registered parties (threads), and then start 4 threads each executing a Task that performs some work and then waits for the other threads to complete before proceeding to the next phase. The Task constructor registers the thread with the Phaser using the register() method, and the run() method waits for the other threads to arrive at the current phase using arriveAndAwaitAdvance().

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Core Java interview β€” then scores it.
πŸ“ž Practice Core Java β€” free 15 min
πŸ“• Buy this interview preparation book: 100 Core Java questions & answers β€” PDF + EPUB for $5

All 100 Core Java questions Β· All topics