What's a monitor in Java?
A monitor is mechanism to control concurrent access to an object.
This allows you to do:
Thread 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Thread 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
This prevents Threads 1 and 2 accessing the monitored (synchronized) section at the same time. One will start, and monitor will prevent the other from accessing the region before the first one finishes.
It's not a special object. It's synchronization mechanism placed at class hierarchy root: java.lang.Object
.
There are also wait
and notify
methods that will also use object's monitor to communication among different threads.
A monitor is an entity that possesses both a lock and a wait set. In Java, any Object
can serve as a monitor.
For a detailed explanation of how monitors work in Java, I recommend reading the Monitor Mechanics section of Concurrent Programming in Java (the preceding link displays the preview in Google books, and that section is available for reading).
- A monitor is a concept/mechanism that's not limited to the Java Language;
- "In concurrent programming, a monitor is an object or module intended to be used safely by more than one thread";
- As every reader knows, every object in Java is a sub-class of java.lang.Object. The java folks made java.lang.Object in such a way that it has features and characteristics that enables Java programmers to use any object as a monitor. For example, every object has a wait queue,a re-entrance queue and wait and notify methods making it a monitor;
- read about monitors here.