Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Within a program, the code segments that access the same object from separate, concurrent threads are called critical sections. A critical section can be a block or a method and is identified with thesynchronized
keyword. The Java platform associates a lock with every object and the lock is acquired when a critical section is entered.In the producer-consumer example, the
put
andget
methods ofCubbyHole.java
are the critical sections. TheConsumer
should not access theCubbyHole
when theProducer
is changing it, and theProducer
should not modify it when theConsumer
is getting the value. So,put
andget
in theCubbyHole
class should be marked with thesynchronized
keyword.The following is a code skeleton for the
CubbyHole
class.The method declarations for bothpublic class CubbyHole { private int contents; private boolean available = false; public synchronized int get(int who) { ... } public synchronized void put(int who, int value) { ... } }put
andget
contain thesynchronized
keyword. Whenever control enters a synchronized method, the thread that called the method locks the object whose method has been called. Other threads cannot call a synchronized method on the same object until the object is unlocked.Thus, when it calls
CubbyHole
'sput
method, theProducer
locks theCubbyHole
, thereby preventing theConsumer
from callingCubbyHole
'sget
method.When thepublic synchronized void put(int value) { //CubbyHole locked by the Producer. ... //CubbyHole unlocked by the Producer. }put
method returns, theProducer
unlocks theCubbyHole
.Similarly, when the
Consumer
callsCubbyHole
'sget
method, it locks theCubbyHole
, thereby preventing theProducer
from callingput
.The acquisition and release of a lock is done automatically by the Java runtime system. This ensures that race conditions cannot occur in the underlying implementation of the threads, thus ensuring data integrity.public synchronized int get() { //CubbyHole locked by the Consumer. ... //CubbyHole unlocked by the Consumer. }Synchronization isn't the whole story. The two threads must also be able to notify one another when they've done their job. Learn more about that after a brief foray into reentrant locks.
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.