Hello Friends,
In this post, we will talk and learn about How to Write a Java program Print Odd and Even Numbers Using Threads And Semaphore.
Here Idea is that Thread-1 has to print Odd numbers and Thread-2 has to print Even numbers in Sequential order as below:
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
Resource OddAndEvenNumberGenerator.java is going to share with 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 |
package com.kkjavatutorials.resource; import java.util.concurrent.Semaphore; public class OddAndEvenNumberGenerator { private Semaphore semaphoreOdd = new Semaphore(1); private Semaphore semaphoreEven = new Semaphore(0); public void printOddNumber(int number) { try { semaphoreOdd.acquire(); System.out.println(Thread.currentThread().getName()+":"+number); } catch (InterruptedException e) { e.printStackTrace(); }finally { semaphoreEven.release(); } } public void printEvenNumber(int number) { try { semaphoreEven.acquire(); System.out.println(Thread.currentThread().getName()+":"+number); } catch (InterruptedException e) { e.printStackTrace(); }finally { semaphoreOdd.release(); } } } |
Source code of OddNumberGenerator.java and EvenNumberGenerator.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.kkjavatutorials.task; import com.kkjavatutorials.resource.OddAndEvenNumberGenerator; public class OddNumberGenerator implements Runnable { private OddAndEvenNumberGenerator oddAndEvenNumberGenerator; private int totalNumberInSEquence; public OddNumberGenerator(OddAndEvenNumberGenerator oddAndEvenNumberGenerator, int totalNumberInSEquence) { super(); this.oddAndEvenNumberGenerator = oddAndEvenNumberGenerator; this.totalNumberInSEquence = totalNumberInSEquence; } @Override public void run() { for (int i = 1; i <= totalNumberInSEquence; i =i+2) { oddAndEvenNumberGenerator.printOddNumber(i); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.kkjavatutorials.task; import com.kkjavatutorials.resource.OddAndEvenNumberGenerator; public class EvenNumberGenerator implements Runnable { private OddAndEvenNumberGenerator oddAndEvenNumberGenerator; private int totalNumberInSEquence; public EvenNumberGenerator(OddAndEvenNumberGenerator oddAndEvenNumberGenerator, int totalNumberInSEquence) { super(); this.oddAndEvenNumberGenerator = oddAndEvenNumberGenerator; this.totalNumberInSEquence = totalNumberInSEquence; } @Override public void run() { for (int i = 2; i <= totalNumberInSEquence; i = i+2) { oddAndEvenNumberGenerator.printEvenNumber(i); } } } |
OddEvenNumberPrintByTwoThreadsTest.Java Client program with main Method:
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 |
package com.kkjavatutorials.client; import com.kkjavatutorials.resource.OddAndEvenNumberGenerator; import com.kkjavatutorials.task.EvenNumberGenerator; import com.kkjavatutorials.task.OddNumberGenerator; /** * Print Odd-Even Numbers Using Threads And Semaphore * @author KK JavaTutorials * */ public class OddEvenNumberPrintByTwoThreadsTest { public static void main(String[] args) { int TOTAL_NUMBER_IN_SEQUENCE = 20; OddAndEvenNumberGenerator oddAndEvenNumberGenerator = new OddAndEvenNumberGenerator(); OddNumberGenerator oddNumberGenerator = new OddNumberGenerator(oddAndEvenNumberGenerator, TOTAL_NUMBER_IN_SEQUENCE); EvenNumberGenerator evenNumberGenerator = new EvenNumberGenerator(oddAndEvenNumberGenerator, TOTAL_NUMBER_IN_SEQUENCE); Thread t1 = new Thread(oddNumberGenerator, "Thread-1"); Thread t2 = new Thread(evenNumberGenerator, "Thread-2"); t1.start(); t2.start(); } } |
If you run OddEvenNumberPrintByTwoThreadsTest.Java then we get 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:
Understating of Polymorphism in Java
Method Overloading or Static Polymorphism in Java
Method Overriding or Dynamic Polymorphism in Java
Understating of Inheritance in Java
Difference Between Encapsulation and Abstraction in Java
Association Aggregation And Composition in Java
That’s all about How to Print Odd and Even Numbers Using Threads And Semaphore ?
If you have any feedback or suggestion please feel free to drop in below comment box.