Java Reference
In-Depth Information
14.19. The synchronized Statement
A synchronized statement acquires a mutual-exclusion lock (§ 17.1 ) on behalf of the execut-
ing thread, executes a block, then releases the lock. While the executing thread owns the
lock, no other thread may acquire the lock.
SynchronizedStatement:
synchronized ( Expression ) Block
The type of Expression must be a reference type, or a compile-time error occurs.
A synchronized statement is executed by first evaluating the Expression . Then:
• If evaluation of the Expression completes abruptly for some reason, then the syn-
chronized statement completes abruptly for the same reason.
• Otherwise, if the value of the Expression is null , a NullPointerException is thrown.
• Otherwise, let the non- null value of the Expression be V . The executing thread
locks the monitor associated with V . Then the Block is executed, and then there is a
choice:
♦ If execution of the Block completes normally, then the monitor is unlocked and
the synchronized statement completes normally.
♦ If execution of the Block completes abruptly for any reason, then the monitor
is unlocked and the synchronized statement completes abruptly for the same
reason.
The locks acquired by synchronized statements are the same as the locks that are acquired
implicitly by synchronized methods (§ 8.4.3.6 ) . A single thread may acquire a lock more than
once.
Acquiring the lock associated with an object does not in itself prevent other threads from
accessing fields of the object or invoking un- synchronized methods on the object. Other
threads can also use synchronized methods or the synchronized statement in a conventional
manner to achieve mutual exclusion.
Example 14.19-1. The synchronized Statement
Click here to view code image
class Test {
public static void main(String[] args) {
Test t = new Test();
Search WWH ::




Custom Search