Thursday, March 12, 2020

Print Even and Odd number in the sequence by two threads in java


Print Even and Odd number in the sequence by two threads in java

Thread-1 1
Thread-0 2
Thread-1 3
Thread-0 4
Thread-1 5
Thread-0 6
Thread-1 7
Thread-0 8
Thread-1 9
Thread-0 10 


Printing this sequence is the coordination between the threads and this coordination can be achieved with the the help of wait and notify.

Two threads are running simultaneously.
When one thread enters the critical section then it checks whether odd is printed or not on the basis of the flag. If the odd in not printed then it waits for other thread to print the odd number and wait for notify signal and vice versa.

PrintEvenOddTester.java

public class PrintEvenOddTester {

      public static void main(String[] args) {
            Printer p = new Printer();

            TaskEvenOdd te1 = new TaskEvenOdd(10, ptrue);
            TaskEvenOdd te2 = new TaskEvenOdd(10, pfalse);

            Thread t1 = new Thread(te1);
            Thread t2 = new Thread(te2);

            t1.start();
            t2.start();

      }

}

TaskEvenOdd.java

public class TaskEvenOdd implements Runnable {

      private int max;
      private Printer print;
      private boolean isEvenNumber;

         public TaskEvenOdd(int max, Printer printboolean isEvenNumber) {
            this.max = max;
            this.print = print;
            this.isEvenNumber = isEvenNumber;
      }

      @Override
      public void run() {
            int number = isEvenNumber == true ? 2 : 1;
            while (number <= max) {
                  if (isEvenNumber) {
                        try {
                              print.printEven(number);
                        } catch (InterruptedException e) {
                              // TODO Auto-generated catch block
                              e.printStackTrace();
                        }
                  } else {
                        try {
                              print.printOdd(number);
                        } catch (InterruptedException e) {
                              // TODO Auto-generated catch block
                              e.printStackTrace();
                        }
                  }
                  number = number + 2;
            }

      }

}



Printer.java

public class Printer {
      boolean printOdd = false;

      public void printEven(int nthrows InterruptedException {
            synchronized (this) {

                  while (!printOdd) {
                        wait();
                  }

       System.out.println(Thread.currentThread().getName() + " " + n);
                  printOdd=false;
                  notifyAll();
            }
      }

      public void printOdd(int nthrows InterruptedException {
            synchronized (this) {
                  while (printOdd) {
                        wait();
                  }
       System.out.println(Thread.currentThread().getName() + " " + n);
                  printOdd=true;
                  notifyAll();

            }
      }

}

Output:
Thread-1 1
Thread-0 2
Thread-1 3
Thread-0 4
Thread-1 5
Thread-0 6
Thread-1 7
Thread-0 8
Thread-1 9
Thread-0 10 
===============================================


Method 2:



Create a class named "OddEvenRunnable".
It will implement the Runnable interface.
public class OddEvenRunnable implements Runnable{
 public int PRINT_NUMBERS_UPTO=10;
 static int  number=1;
 int remainder;
 static Object lock=new Object();
 OddEvenRunnable(int remainder)
 {
  this.remainder=remainder;
 }
 @Override
 public void run() {
  while (number < PRINT_NUMBERS_UPTO) {
   synchronized (lock) {
    while (number % 2 != remainder) { // wait for numbers other than remainder
     try {
      lock.wait();
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
    System.out.println(Thread.currentThread().getName() + " " + number);
    number++;
    lock.notifyAll();
   }
  }
 }
}

Create Main class named “PrintOddEvenMain”



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class PrintOddEvenMain {
 public static void main(String[] args) {
  OddEvenRunnable oddRunnable=new OddEvenRunnable(1);
  OddEvenRunnable evenRunnable=new OddEvenRunnable(0);
  Thread t1=new Thread(oddRunnable,"Odd");
  Thread t2=new Thread(evenRunnable,"Even");
 
  t1.start();
  t2.start();
 }
}


Output:

Odd 1
Even 2
Odd 3
Even 4
Odd 5
Even 6
Odd 7
Even 8
Odd 9
Even 10

================================================



No comments:

Post a Comment

Create a Digital Clock using HTML and JavaScript

Create a Digital Clock using HTML and JavaScript  <! DOCTYPE html> < html > < head > <...

Followers

Search This Blog

Popular Posts