Write a Program to print even and odd numbers using 2 threads in Java

Below program illustrates how to use wait and notify to print even and odd numbers one by one to print numbers series using Java:


public class PrintEvenOddsUsingWaitNotify {

	public static void main(String[] args) {
		Printer printer = new Printer();
		Thread t1 = new Thread(new TaskEvenOdd(100, printer, false), "Odd");
		Thread t2 = new Thread(new TaskEvenOdd(100, printer, true), "Even");
		t1.start();
		t2.start();
	}
}

class TaskEvenOdd implements Runnable {
	private int max;
	private Printer printer;
	private boolean isEvenNumber;

	public TaskEvenOdd(int max, Printer printer, boolean isEvenNumber) {
		this.max = max;
		this.printer = printer;
		this.isEvenNumber = isEvenNumber;
	}

	@Override
	public void run() {
		int number = isEvenNumber ? 2 : 1;
		while (number <= max) {
			if (isEvenNumber) {
				printer.printEvenNumber(number);
			} else {
				printer.printOddNumber(number);
			}
			number += 2;
		}
	}
}

class Printer {
	private boolean isOdd;

	public synchronized void printEvenNumber(int number) {
		while (!isOdd) {
			try {
				wait();
			} catch (InterruptedException e) {
				Thread.currentThread().interrupt();
			}
		}
		System.out.println(number);
		isOdd = false;
		notify();
	}

	public synchronized void printOddNumber(int number) {
		while (isOdd) {
			try {
				wait();
			} catch (InterruptedException e) {
				Thread.currentThread().interrupt();
			}
		}
		System.out.println(number);
		isOdd = true;
		notify();
	}
}

Author: Mahesh

Technical Lead with 10 plus years of experience in developing web applications using Java/J2EE and web technologies. Strong in design and integration problem solving skills. Ability to learn, unlearn and relearn with strong written and verbal communications.