Inter-thread communication in Java
In this tutorial, we are going to learn about Inter-thread communication in Java.
Allowing multiple synchronized threads to communicate with each other and maintaining one thread object execution at a time(with multiple thread objects in a row) is known as Inter-thread communication in Java. This is also known as Thread-safe operation or Thread synchronization.
The synchronized keyword implicitly uses three methods for Inter-thread communication. All the classes can acquire these methods because they belong to Object class. They all are declared as final and must be used in a synchronized block only. These are the following methods:
- public void wait(): This method is used to send a current thread object into a waiting state till another thread invokes the notify() method or notifyAll() method for this object.
- public void notify(): This method is used to send a single thread object which is in waiting state into a running state.
- public void notifyAll(): This method is used to send multiple thread objects that are in a waiting state into a running state.
Program:
Let’s see a program of inter-thread. Below is the Java code :
class MobileRecharge {
int wallet = 400;
public MobileRecharge()
{
Thread t1 = new Thread() {
public void run() {
// recharging mobile
rechargeOf(500);
}
};
t1.start();
Thread t2=new Thread() {
public void run() {
// adding money into wallet
addingMoneyInWallet(1000);
}
};
t2.start();
}
// method to re-charge mobile
public synchronized void rechargeOf(int amount) {
// if wallet money is less, then it will wait for adding money in wallet
if (wallet < amount) {
System.out.println("less money in wallet, waiting for addition of money...");
try {
wait();
} catch (Exception e) {
}
}
// if money is sufficient then recharge will be done & amount will be debited
// from wallet
wallet -= amount;
System.out.println("Recharge is successful...!!!");
System.out.println("Remaining money in wallet is : " + wallet);
notify();
}
// method for adding money into the wallet
public synchronized void addingMoneyInWallet(int amount) {
if (wallet > amount) {
try {
wait();
} catch (Exception e) {
}
}
wallet += amount;
System.out.println("Money added in wallet...");
notify();
}
}
// main class
class ThreadExample extends Thread{
public static void main(String[] args) {
new MobileRecharge();
}
}Output :
The output of the above program will be :
less money in wallet, waiting for addition of money... Money added in wallet... Recharge is successful...!!! Remaining money in wallet is : 900
System.out.println(“Recharge is successful…!!!”)
// in above line semi colon is missing