- In this post, we will learn How to write a java program to print Even and Odd Numbers Using 2 Threads(Approach-2).
- In the previous post, we already had seen How to Print numbers in sequence using 2 Threads
- In this post, I have solved same problem statement with a different approach.
OddAndEvenNumberGenerator.java is used by both the threads to print odd and even numbers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
package com.kkjavatutorials.task; public class OddAndEvenNumberGenerator { private int totalNumberInSequece; private boolean evenFlag; private int number = 1; public OddAndEvenNumberGenerator(int totalNumberInSequece) { super(); this.totalNumberInSequece = totalNumberInSequece; } public void printOddNumber() { synchronized (this) { while (number <= totalNumberInSequece-1) { while (evenFlag) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+": "+number); number++; evenFlag = true; notify(); } } } public void printEvenNumber() { synchronized (this) { while (number <= totalNumberInSequece-1) { while (!evenFlag) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+": "+number); number++; evenFlag = false; notify(); } } } } |
OddNumberPrinter.java calls printOddNumber() method to print odd numbers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package com.kkjavatutorials.task; public class OddNumberPrinter implements Runnable { private OddAndEvenNumberGenerator oddAndEvenBumberGenerator; public OddNumberPrinter(OddAndEvenNumberGenerator oddAndEvenBumberGenerator) { super(); this.oddAndEvenBumberGenerator = oddAndEvenBumberGenerator; } @Override public void run() { oddAndEvenBumberGenerator.printOddNumber(); } } |
EvenNumberPrinter.java calls printEvenNumber() method to print even numbers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package com.kkjavatutorials.task; public class EvenNumberPrinter implements Runnable { private OddAndEvenNumberGenerator oddAndEvenBumberGenerator; public EvenNumberPrinter(OddAndEvenNumberGenerator oddAndEvenBumberGenerator) { super(); this.oddAndEvenBumberGenerator = oddAndEvenBumberGenerator; } @Override public void run() { oddAndEvenBumberGenerator.printEvenNumber(); } } |
Client program SequenceNumberGeneratorTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package com.kkjavatutorials.client; import com.kkjavatutorials.task.EvenNumberPrinter; import com.kkjavatutorials.task.OddAndEvenNumberGenerator; import com.kkjavatutorials.task.OddNumberPrinter; /** * Java program to Print numbers in sequence using 2 Threads * @author KK JavaTutorials * */ public class SequenceNumberGeneratorTest { private static final int TOTAL_NUMBER_IN_SEQUENCE = 20; public static void main(String[] args) { OddAndEvenNumberGenerator oddAndEvenNumberGenerator = new OddAndEvenNumberGenerator(TOTAL_NUMBER_IN_SEQUENCE); Thread t1 = new Thread(new OddNumberPrinter(oddAndEvenNumberGenerator), "Thread-1"); Thread t2 = new Thread(new EvenNumberPrinter(oddAndEvenNumberGenerator), "Thread-2"); t1.start(); t2.start(); } } |
If you run client program SequenceNumberGeneratorTest.java then this will generate below output:
Thread-1: 1
Thread-2: 2
Thread-1: 3
Thread-2: 4
Thread-1: 5
Thread-2: 6
Thread-1: 7
Thread-2: 8
Thread-1: 9
Thread-2: 10
Thread-1: 11
Thread-2: 12
Thread-1: 13
Thread-2: 14
Thread-1: 15
Thread-2: 16
Thread-1: 17
Thread-2: 18
Thread-1: 19
Thread-2: 20
You May Also Like:
Difference between List and Set in Java Collection ?
When should we choose LinkedList over ArrayList for a given Scenario and Why?
Is there concurrent version for TreeMap and TreeSet in Java Collections Framework?
What is difference between Collections. Sort() and Arrays.sort()? Which one is better with respect to time efficiency?
What are fail-fast and fail-safe Iterator?
What is difference between Iterator and LisIterator?
Why Prime Numbers are considered in writing certain algorithms like hashcode()?
What all collections utilizes hashCode() method in java?
Describe CopyOnWriteArrayList? Where is it used in Java Applications?
That’s all about Print numbers in sequence using 2 Threads – Approach-2
If you have any feedback or suggestion please feel free to drop in below comment box.