Synchronization

Multithreading Example with Synchronization

Here is the same example which prints counter value in sequence and every time we run it, it produces the same result.

Example

class PrintDemo {
   
   public void printCount() {
  
  try {
     
     for(int i = 5; i > 0; i--) {
        System.out.println("Counter   ---   "  + i );
     }
  } catch (Exception e) {
     System.out.println("Thread  interrupted.");
  }
} } class ThreadDemo extends Thread { private Thread t; private String threadName; PrintDemo PD; ThreadDemo(String name, PrintDemo pd) {
  threadName = name;
  PD = pd;
} public void run() {
  
  synchronized(PD) {
     PD.printCount();
  }
  System.out.println("Thread " +  threadName + " exiting.");
} public void start () {
  System.out.println("Starting " +  threadName );
  
  if (t == null) {
     t = new Thread (this, threadName);
     t.start ();
  }
} } public class TestThread { public static void main(String args[]) {
  PrintDemo PD = new PrintDemo();
  ThreadDemo T1 = new ThreadDemo("Thread - 1 ", PD);
  ThreadDemo T2 = new ThreadDemo("Thread - 2 ", PD);
  T1.start();
  T2.start();
  // wait for threads to end
  try {
     T1.join();
     T2.join();
  } catch (Exception e) {
     System.out.println("Interrupted");
  }
} }

This produces the same result every time you run this program −

Output

Starting Thread - 1
Starting Thread - 2
Counter   ---   5
Counter   ---   4
Counter   ---   3
Counter   ---   2
Counter   ---   1
Thread Thread - 1  exiting.
Counter   ---   5
Counter   ---   4
Counter   ---   3
Counter   ---   2
Counter   ---   1
Thread Thread - 2  exiting.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *