2. Objectives
On completion of this period, you would be
able to learn
• Synchronization
• Monitors
• Unsynchronized Example
• Locking Object
• Synchronized Examples
2
3. Recap
In this previous class, you have learnt
• Concept of thread priority
• Relevant methods and constants
• Relevant programs
3
4. 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
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 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
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 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
11. 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
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
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
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 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
19. Quiz
1. Which concept is used by Java in inter-thread-
synchronization
A. Process
B. Monitor
C. Multitasking
D. None
19
20. Quiz Contd..
2. Which keyword 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