Concept of Synchronization




                             1
Objectives

On completion of this period, you would be
able to learn

•   Synchronization
•   Monitors
•   Unsynchronized Example
•   Locking Object
•   Synchronized Examples



                                             2
Recap

In this previous class, you have learnt
• Concept of thread priority
• Relevant methods and constants
• Relevant programs




                                          3
Synchronization

• We learnt in operating systems the concept of
  critical section
  • Two or more processes shares a resource like
    variables, files etc
  • They need to be synchronized, so that, the state
    of the shared resource is consistent
  • The same concept can be applied to the treads as
    well




                                                       4
Synchronization
                                    Contd . . .

• What is synchronization?

  • Concurrently running threads may require outside
    resources (shared resources) or methods
  • Need to communicate with other concurrently running
    threads to know their status and activities
  • Example: Producer-Consumer problem




                                                          5
Monitor

• An object which is used as a mutually
  exclusive lock
• Only one thread can acquire a monitor at a
  time
• All other threads attempting to enter the
  monitor will be suspended
• Every java object has its own implicit monitor
• Such     monitors    can     be    used     for
  synchronization


                                                    6
Unsynchronized Example

class TwoStrings {
     static void print(String str1, String
   str2) {
     System.out.print(str1);
     try {
        Thread.sleep(500);
      } catch (InterruptedException ie) {
     }
     System.out.println(str2);
   }
 }

                                             7
Unsynchronized Example                     Contd . . .
class PrintStringsThread implements Runnable {
  Thread thread;
                                          A Thread implementation
  String str1, str2;                      class
PrintStringsThread(String str1, String str2) {
    this.str1 = str1;
    this.str2 = str2;
    thread = new Thread(this);
    thread.start();
  }
  public void run() {
    TwoStrings.print(str1, str2);        Shared Resource

  }
}
                                                                      8
Unsynchronized Example
                                                 Contd . . .

class TestThread {
   public static void main(String args[]) {
     new PrintStringsThread("Hello ", "there.");
     new PrintStringsThread("How are ", "you?");
     new PrintStringsThread("Thank you ", "very much!");
   }
                            Output
 }

                               Expected output is
                               Hello there
                               How are you?
                               Thank you very much!
                                                               9
Locking of an object

• Assures that only one thread gets to access a
  particular method
• Java allows you to lock objects with the use of
  monitors
  • All Java objects have their own implicit monitor
  • Object enters the implicit monitor when the object's
    ‘synchronized’ method is invoked
  • Once an object is in the monitor, the monitor makes
    sure that no other thread accesses the same object



                                                           10
Locking of an object
                                          Contd . . .
• Monitor is implemented in Java through
  ‘synchronized’ keyword
• The ‘synchronized’ keyword can be used in two
  ways:
  1. Prefixed to the header of the method definition
  2. Can synchronize the object of which the method is a
    member of
     • synchronized (<object>) {
       //statements to be synchronized
     }


                                                           11
First Approach : synchronized
                                      Use of synchronized keyword
class TwoStrings {
   synchronized static void
   print(String str1, String str2) {
     System.out.print(str1);
     try {
       Thread.sleep(500);
      }catch(InterruptedException ie) {
     }
     System.out.println(str2);
   }
 }
                                                                    12
Contd . . .
          First Approach : synchronized
class PrintStringsThread
       implements Runnable {
  Thread thread;
  String str1, str2;

PrintStringsThread(String str1,String str2) {
    this.str1 = str1;
    this.str2 = str2;
    thread = new Thread(this);
    thread.start();
  }
  public void run() {
    TwoStrings.print(str1, str2);
  }
}       Shared Resource
                                                        13
Contd . . .
          First Approach : synchronized

class TestThread {
   public static void main(String args[]) {
     new PrintStringsThread("Hello ", "there.");
     new PrintStringsThread("How are ", "you?");
     new PrintStringsThread("Thank you ", "very much!");
   }
                            Output
 }



                                  Got the output as
                                  expected
                                                                    14
Second Approach : synchronized
class TwoStrings {
   static void print(String str1, String str2) {
     System.out.print(str1);
     try {
       Thread.sleep(500);
     }catch(InterruptedException ie){ }
     System.out.println(str2);
   }
 }
class PrintStringsThread implements Runnable {
   Thread thread;
   String str1, str2;
   TwoStrings ts;
                                                   15
Second Approach : synchronized                        Contd . . .


PrintStringsThread(String str1, String str2, TwoStrings ts)
 {
     this.str1 = str1;
     this.str2 = str2;
     this.ts = ts;
     thread = new Thread(this);
     thread.start();
}
                                  Use of synchronized statement
public void run() {
    synchronized (ts) {
       ts.print(str1, str2);
    }
  }
}


                                                                          16
Contd . . .
     Second Approach : synchronized

class TestThread {
   public static void main(String args[]) {
     new PrintStringsThread("Hello ", "there.");
     new PrintStringsThread("How are ", "you?");
     new PrintStringsThread("Thank you ", "very much!");
   }
 }
                          Output




                                   Got the output as
                                   expected
                                                                     17
Summary

• In this class we have discussed
  •   Problem of synchronization
  •   Monitors and locking objects
  •   Two approaches of using synchronized keyword
  •   Relevant example programs


• In the next lesson we look at Inter-Thread
  Communication



                                                     18
Quiz

1. Which concept is used by Java in inter-thread-
   synchronization

  A.   Process
  B.   Monitor
  C.   Multitasking
  D.   None




                                                    19
Quiz Contd..
2. Which keyword is used for synchronization in
  Java ?

  A.   synchronize
  B.   synchronised
  C.   synchronized
  D.   synchronizing




                                                  20
Frequently Asked Questions

1.   Explain the concept of synchronization
2.   What is monitor?
3.   How monitor is implemented in Java?
4.   What are the different ways of using
     ‘synchronized’ keyword ?




                                              21

Synchronization.37

  • 1.
  • 2.
    Objectives On completion ofthis period, you would be able to learn • Synchronization • Monitors • Unsynchronized Example • Locking Object • Synchronized Examples 2
  • 3.
    Recap In this previousclass, you have learnt • Concept of thread priority • Relevant methods and constants • Relevant programs 3
  • 4.
    Synchronization • We learntin operating systems the concept of critical section • Two or more processes shares a resource like variables, files etc • They need to be synchronized, so that, the state of the shared resource is consistent • The same concept can be applied to the treads as well 4
  • 5.
    Synchronization Contd . . . • What is synchronization? • Concurrently running threads may require outside resources (shared resources) or methods • Need to communicate with other concurrently running threads to know their status and activities • Example: Producer-Consumer problem 5
  • 6.
    Monitor • An objectwhich is used as a mutually exclusive lock • Only one thread can acquire a monitor at a time • All other threads attempting to enter the monitor will be suspended • Every java object has its own implicit monitor • Such monitors can be used for synchronization 6
  • 7.
    Unsynchronized Example class TwoStrings{ static void print(String str1, String str2) { System.out.print(str1); try { Thread.sleep(500); } catch (InterruptedException ie) { } System.out.println(str2); } } 7
  • 8.
    Unsynchronized Example Contd . . . class PrintStringsThread implements Runnable { Thread thread; A Thread implementation String str1, str2; class PrintStringsThread(String str1, String str2) { this.str1 = str1; this.str2 = str2; thread = new Thread(this); thread.start(); } public void run() { TwoStrings.print(str1, str2); Shared Resource } } 8
  • 9.
    Unsynchronized Example Contd . . . class TestThread { public static void main(String args[]) { new PrintStringsThread("Hello ", "there."); new PrintStringsThread("How are ", "you?"); new PrintStringsThread("Thank you ", "very much!"); } Output } Expected output is Hello there How are you? Thank you very much! 9
  • 10.
    Locking of anobject • Assures that only one thread gets to access a particular method • Java allows you to lock objects with the use of monitors • All Java objects have their own implicit monitor • Object enters the implicit monitor when the object's ‘synchronized’ method is invoked • Once an object is in the monitor, the monitor makes sure that no other thread accesses the same object 10
  • 11.
    Locking of anobject Contd . . . • Monitor is implemented in Java through ‘synchronized’ keyword • The ‘synchronized’ keyword can be used in two ways: 1. Prefixed to the header of the method definition 2. Can synchronize the object of which the method is a member of • synchronized (<object>) { //statements to be synchronized } 11
  • 12.
    First Approach :synchronized Use of synchronized keyword class TwoStrings { synchronized static void print(String str1, String str2) { System.out.print(str1); try { Thread.sleep(500); }catch(InterruptedException ie) { } System.out.println(str2); } } 12
  • 13.
    Contd . .. First Approach : synchronized class PrintStringsThread implements Runnable { Thread thread; String str1, str2; PrintStringsThread(String str1,String str2) { this.str1 = str1; this.str2 = str2; thread = new Thread(this); thread.start(); } public void run() { TwoStrings.print(str1, str2); } } Shared Resource 13
  • 14.
    Contd . .. First Approach : synchronized class TestThread { public static void main(String args[]) { new PrintStringsThread("Hello ", "there."); new PrintStringsThread("How are ", "you?"); new PrintStringsThread("Thank you ", "very much!"); } Output } Got the output as expected 14
  • 15.
    Second Approach :synchronized class TwoStrings { static void print(String str1, String str2) { System.out.print(str1); try { Thread.sleep(500); }catch(InterruptedException ie){ } System.out.println(str2); } } class PrintStringsThread implements Runnable { Thread thread; String str1, str2; TwoStrings ts; 15
  • 16.
    Second Approach :synchronized Contd . . . PrintStringsThread(String str1, String str2, TwoStrings ts) { this.str1 = str1; this.str2 = str2; this.ts = ts; thread = new Thread(this); thread.start(); } Use of synchronized statement public void run() { synchronized (ts) { ts.print(str1, str2); } } } 16
  • 17.
    Contd . .. Second Approach : synchronized class TestThread { public static void main(String args[]) { new PrintStringsThread("Hello ", "there."); new PrintStringsThread("How are ", "you?"); new PrintStringsThread("Thank you ", "very much!"); } } Output Got the output as expected 17
  • 18.
    Summary • In thisclass we have discussed • Problem of synchronization • Monitors and locking objects • Two approaches of using synchronized keyword • Relevant example programs • In the next lesson we look at Inter-Thread Communication 18
  • 19.
    Quiz 1. Which conceptis used by Java in inter-thread- synchronization A. Process B. Monitor C. Multitasking D. None 19
  • 20.
    Quiz Contd.. 2. Whichkeyword is used for synchronization in Java ? A. synchronize B. synchronised C. synchronized D. synchronizing 20
  • 21.
    Frequently Asked Questions 1. Explain the concept of synchronization 2. What is monitor? 3. How monitor is implemented in Java? 4. What are the different ways of using ‘synchronized’ keyword ? 21