Mercurial > hg > blitz_condensed
comparison src/EDU/oswego/cs/dl/util/concurrent/ReadWriteLock.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3dc0c5604566 |
---|---|
1 /* | |
2 File: ReadWriteLock.java | |
3 | |
4 Originally written by Doug Lea and released into the public domain. | |
5 This may be used for any purposes whatsoever without acknowledgment. | |
6 Thanks for the assistance and support of Sun Microsystems Labs, | |
7 and everyone contributing, testing, and using this code. | |
8 | |
9 History: | |
10 Date Who What | |
11 11Jun1998 dl Create public version | |
12 */ | |
13 | |
14 | |
15 package EDU.oswego.cs.dl.util.concurrent; | |
16 | |
17 | |
18 /** | |
19 * ReadWriteLocks maintain a pair of associated locks. | |
20 * The readLock may be held simultanously by multiple | |
21 * reader threads, so long as there are no writers. The writeLock | |
22 * is exclusive. ReadWrite locks are generally preferable to | |
23 * plain Sync locks or synchronized methods in cases where: | |
24 * <ul> | |
25 * <li> The methods in a class can be cleanly separated into | |
26 * those that only access (read) data vs those that | |
27 * modify (write). | |
28 * <li> Target applications generally have more readers than writers. | |
29 * <li> The methods are relatively time-consuming (as a rough | |
30 * rule of thumb, exceed more than a hundred instructions), so it | |
31 * pays to introduce a bit more overhead associated with | |
32 * ReadWrite locks compared to simple synchronized methods etc | |
33 * in order to allow concurrency among reader threads. | |
34 * | |
35 * </ul> | |
36 * Different implementation classes differ in policies surrounding | |
37 * which threads to prefer when there is | |
38 * contention. By far, the most commonly useful policy is | |
39 * WriterPreferenceReadWriteLock. The other implementations | |
40 * are targeted for less common, niche applications. | |
41 *<p> | |
42 * Standard usage: | |
43 * <pre> | |
44 * class X { | |
45 * ReadWriteLock rw; | |
46 * // ... | |
47 * | |
48 * public void read() throws InterruptedException { | |
49 * rw.readLock().acquire(); | |
50 * try { | |
51 * // ... do the read | |
52 * } | |
53 * finally { | |
54 * rw.readlock().release() | |
55 * } | |
56 * } | |
57 * | |
58 * | |
59 * public void write() throws InterruptedException { | |
60 * rw.writeLock().acquire(); | |
61 * try { | |
62 * // ... do the write | |
63 * } | |
64 * finally { | |
65 * rw.writelock().release() | |
66 * } | |
67 * } | |
68 * } | |
69 * </pre> | |
70 * @see Sync | |
71 * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] | |
72 | |
73 **/ | |
74 | |
75 public interface ReadWriteLock { | |
76 /** get the readLock **/ | |
77 Sync readLock(); | |
78 | |
79 /** get the writeLock **/ | |
80 Sync writeLock(); | |
81 } | |
82 |