This document discusses synchronization in multi-threaded programs. It covers monitors, which are used as mutually exclusive locks to synchronize access to shared resources. The synchronized keyword in Java can be used in two ways - by prefixing it to a method header, or by synchronizing an object within a synchronized statement. Examples are provided to demonstrate synchronization issues without locking, and how to resolve them by using the synchronized keyword in methods or on objects.
In this document
Powered by AI
Overview of synchronization concepts, objectives of learning, and recap of prior content.
Critical section in operating systems where shared resources require synchronization among threads.
Definition of monitor as a lock for exclusive thread access, with unsynchronized examples.
Explanation of object locking in Java using monitors and the synchronized keyword.
First approach using synchronized methods with Java examples of thread implementation.
Second approach using synchronized statement, showcasing thread synchronization with examples.
Summary of synchronization topics discussed, including next lesson focus on inter-thread communication.
Quiz questions assessing knowledge of synchronization concepts and the synchronized keyword.
Frequently asked questions regarding synchronization, monitors, and usage of synchronized keyword.
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
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
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 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