- In this post, we will learn How to write a Java program to Print numbers in sequence using 2 Threads & Executor Framework
- In the previous posts, we already had seen How to Print numbers in sequence using 2 Threads(Approach-1) and Print numbers in sequence using 2 Threads(Approach-2)
- In this post, I have used the same problem statement and solved using Executor Framework.
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 which using Executor Framework
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 |
package com.kkjavatutorials.client; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; 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 & Executor Framework * @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); ExecutorService executorService = null; try { executorService = Executors.newFixedThreadPool(2); executorService.execute(new OddNumberPrinter(oddAndEvenNumberGenerator)); executorService.execute(new EvenNumberPrinter(oddAndEvenNumberGenerator)); } catch (Exception e) { e.printStackTrace(); }finally { if(executorService != null) executorService.shutdown(); } } } |
If you run client program SequenceNumberGeneratorTest.java then this will generate below output:
pool-1-thread-1: 1
pool-1-thread-2: 2
pool-1-thread-1: 3
pool-1-thread-2: 4
pool-1-thread-1: 5
pool-1-thread-2: 6
pool-1-thread-1: 7
pool-1-thread-2: 8
pool-1-thread-1: 9
pool-1-thread-2: 10
pool-1-thread-1: 11
pool-1-thread-2: 12
pool-1-thread-1: 13
pool-1-thread-2: 14
pool-1-thread-1: 15
pool-1-thread-2: 16
pool-1-thread-1: 17
pool-1-thread-2: 18
pool-1-thread-1: 19
pool-1-thread-2: 20
You May Also Like:
What are the standard ways for handling TimeZone in database transactions?
How to convert time from One Time Zone to another in Java?
What will be the output of this date/time program?
What is the difference Between java.util.Date and java.sql.Date in Java ?
That’s all about Java program to Print numbers in sequence using 2 Threads & Executor Framework
If you have any feedback or suggestion please feel free to drop in below comment box.