From 8b6e6fd5542140150773353197676dbbdcab3350 Mon Sep 17 00:00:00 2001 From: Vaibhav Sahay Date: Fri, 12 Oct 2018 00:51:58 +0530 Subject: [PATCH] initial commit --- .../concurrent/evenandodd/PrintEvenOdd.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOdd.java diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOdd.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOdd.java new file mode 100644 index 0000000000..54d89382b9 --- /dev/null +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOdd.java @@ -0,0 +1,72 @@ +package com.baeldung.concurrent.evenandodd; + +public class PrintEvenOdd { + + public static void main(String... args) { + Printer print = new Printer(); + Thread t1 = new Thread(new TaskEvenOdd(print, 10, false)); + t1.setName("Odd"); + Thread t2 = new Thread(new TaskEvenOdd(print, 10, true)); + t2.setName("Even"); + t1.start(); + t2.start(); + } +} + +class TaskEvenOdd implements Runnable { + private int max; + private Printer print; + private boolean isEvenNumber; + + TaskEvenOdd(Printer print, int max, boolean isEvenNumber) { + this.print = print; + this.max = max; + this.isEvenNumber = isEvenNumber; + } + + @Override + public void run() { + int number = isEvenNumber == true ? 2 : 1; + while (number <= max) { + if (isEvenNumber) { + print.printEven(number); + } else { + print.printOdd(number); + } + number += 2; + } + } +} + +class Printer { + boolean isOdd = false; + + synchronized void printEven(int number) { + while (isOdd == false) { + try { + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.println(Thread.currentThread() + .getName() + ":" + number); + isOdd = false; + notify(); + } + + synchronized void printOdd(int number) { + while (isOdd == true) { + try { + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.println(Thread.currentThread() + .getName() + ":" + number); + isOdd = true; + notify(); + } + +}