How to print even and odd numbers using threads in java

In this post, we will see how to print even and odd numbers using threads in java.

Problem:

You are given two threads. You need to print odd numbers using one thread and even numbers using another thread.You need to print in natural order up to MAX.

For example:

If MAX is 10, you need to print:

1 2 3 4 5 6 7 8 9 10

So 1 3 5 7 9 will be printed by odd thread
2 4 6 8 10 will be printed by even thread.

Solution:

We will use wait and notify to solve how to print even and odd numbers using threads in java.

  • Use a variable called boolean odd. If you want to print odd number, it’s value should be true and vice versa for even number.
  • Create two methods(printOdd and printEven), one will print odd numbers and other will print even numbers.
  • Create two threads, one for odd and one for even.
  • t1 will call  printEven method and t2 will call printOdd method simultaneously.
  • If boolean odd is true in printEven method, t1 will wait.
  • If boolean odd is false in printOdd method, t2 will wait.

Print even and odd numbers using threads in java :

When you run above program, you will get below output:

Checking odd loop
Odd Thread :1
Checking odd loop
Odd waiting : 2
Checking even loop
Even thread :2
Checking even loop
Even waiting: 3
Notified odd :3
Odd Thread :3
Checking odd loop
Odd waiting : 4
Notified even:4
Even thread :4
Checking even loop
Even waiting: 5
Notified odd :5
Odd Thread :5
Checking odd loop
Odd waiting : 6
Notified even:6
Even thread :6
Checking even loop
Even waiting: 7
Notified odd :7
Odd Thread :7
Checking odd loop
Odd waiting : 8
Notified even:8
Even thread :8
Checking even loop
Even waiting: 9
Notified odd :9
Odd Thread :9
Checking odd loop
Odd waiting : 10
Notified even:10
Even thread :10
Checking even loop
Even waiting: 11
Notified odd :11
Odd Thread :11
Checking odd loop
Odd waiting : 12
Notified even:12
Even thread :12
Checking even loop
Even waiting: 13
Notified odd :13
Odd Thread :13
Checking odd loop
Odd waiting : 14
Notified even:14
Even thread :14
Checking even loop
Even waiting: 15
Notified odd :15
Odd Thread :15
Checking odd loop
Odd waiting : 16
Notified even:16
Even thread :16
Checking even loop
Even waiting: 17
Notified odd :17
Odd Thread :17
Checking odd loop
Odd waiting : 18
Notified even:18
Even thread :18
Checking even loop
Even waiting: 19
Notified odd :19
Odd Thread :19
Notified even:20
Even thread :20

If you observe output, you should be able to understand above program.

Let me try to explain first few lines:
Checking odd loop : t2 Checks for while condition in printOdd method
Odd Thread :1 : t2 Prints the count ,increment it by one and make odd =false
Checking odd loop : Checks for while condition in printOdd method
Odd waiting : 2: Since odd=false  now, t2 will wait and releases the lock
Checking even loop: t1 checks for while condition in printEven method
Even thread :2 : t1 prints the count,increment it by one and make odd =true
Checking even loop: t1 checks for while condition in printEven method
Even waiting: 3: Since odd=true now, t1 will wait and releases the lock
Notified odd :3 : Since we have called notify when we were printing “Even thread 2”, it will notify t2.

All other steps will follow.

This is all about printing even and odd numbers using threads in java. Please comment if explanation is not very clear.

Add Comment