In this post, we will learn How to write a java program to Print numbers in sequence using 3 Threads & Executor Service
- In the previous post, we already had seen How to Print numbers in sequence using 3 Threads
- This problem statement follows similar logic.
NumbersGenerator.java is used by all three threads to generate numbers in Sequence
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 |
package com.kkjavatutorials.resource; /** * * @author KK JavaTutorials * NumbersGenerator is used by all three threads to generate numbers in Sequence */ public class NumbersGenerator { private int number = 1; private int numberOfThreads; private int totalNumbersInSequence; public NumbersGenerator(int numberOfThreads, int totalNumbersInSequence) { super(); this.numberOfThreads = numberOfThreads; this.totalNumbersInSequence = totalNumbersInSequence; } public void printNumbers(int result) { synchronized (this) { while (number < totalNumbersInSequence-1) { while (number % numberOfThreads != result) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+" "+number++); notifyAll(); } } } } |
Each thread call method numbersGenerator.printNumbers(result) to generate numbers in sequence
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.kkjavatutorials.resource; /** * @author KK JavaTutorials * Each thread call method printNumbers to generate numbers in sequence */ public class SequenceGeneratorTask implements Runnable { private NumbersGenerator numbersGenerator; private int result; public SequenceGeneratorTask(NumbersGenerator numbersGenerator, int result) { super(); this.numbersGenerator = numbersGenerator; this.result = result; } @Override public void run() { numbersGenerator.printNumbers(result); } } |
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 37 |
package com.kkjavatutorials.client; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.kkjavatutorials.resource.NumbersGenerator; import com.kkjavatutorials.resource.SequenceGeneratorTask; /** * Java program to Print numbers in sequence using 3 Threads * @author KK JavaTutorials * */ public class SequenceNumberGeneratorTest { private static final int TOTAL_NUMBER_IN_SEQUENCE = 20; private static final int TOTAL_NUMBER_OF_THREADS = 3; public static void main(String[] args) { NumbersGenerator numbersGenerator = new NumbersGenerator(TOTAL_NUMBER_OF_THREADS, TOTAL_NUMBER_IN_SEQUENCE); ExecutorService executorService = null; try { executorService = Executors.newFixedThreadPool(TOTAL_NUMBER_OF_THREADS); executorService.submit(new SequenceGeneratorTask(numbersGenerator, 1)); executorService.submit(new SequenceGeneratorTask(numbersGenerator, 2)); executorService.submit(new SequenceGeneratorTask(numbersGenerator, 0)); } 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-3 3
pool-1-thread-1 4
pool-1-thread-2 5
pool-1-thread-3 6
pool-1-thread-1 7
pool-1-thread-2 8
pool-1-thread-3 9
pool-1-thread-1 10
pool-1-thread-2 11
pool-1-thread-3 12
pool-1-thread-1 13
pool-1-thread-2 14
pool-1-thread-3 15
pool-1-thread-1 16
pool-1-thread-2 17
pool-1-thread-3 18
pool-1-thread-1 19
pool-1-thread-2 20
You May Also Like:
Java Program to Swap two numbers using Bitwise XOR Operator?
How to reverse a number in Java
How to check Armstrong number java program
Java program to find factorial of a number
Java Program to Calculate the Power of a Number
Check whether a number is prime or not
That’s all about Java Program to Print numbers in sequence using 3 Threads & Executor Service
If you have any feedback or suggestion please feel free to drop in below comment box.