品雪:
14.19 The synchronized Statement
[阅读: 355] 2005-12-05 06:48:38
14.19 The synchronized Statement
A synchronized statement acquires a mutual-exclusion lock (§17.1) on behalf of
the executing 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.
If evaluation of the Expression completes abruptly for some reason, then the
synchronized 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 lock associated with V. Then the Block is executed. If execution of
the Block completes normally, then the lock is unlocked and the synchronized
statement completes normally. If execution of the Block completes abruptly for
any reason, then the lock is unlocked and the synchronized statement then completes
abruptly for the same reason.
Acquiring the lock associated with an object does not of itself prevent other
threads from accessing fields of the object or invoking unsynchronized methods
on the object. Other threads can also use synchronized methods or the
synchronized statement in a conventional manner to achieve mutual exclusion.
The locks acquired by synchronized statements are the same as the locks
that are acquired implicitly by synchronized methods; see §8.4.3.6. A single
thread may hold a lock more than once.