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(); } }