Mercurial > hg > blitz_condensed
comparison src/EDU/oswego/cs/dl/util/concurrent/TimeoutSync.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: TimeoutSync.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 1Aug1998 dl Create public version | |
12 */ | |
13 | |
14 package EDU.oswego.cs.dl.util.concurrent; | |
15 | |
16 /** | |
17 * A TimeoutSync is an adaptor class that transforms all | |
18 * calls to acquire to instead invoke attempt with a predetermined | |
19 * timeout value. | |
20 *<p> | |
21 * <b>Sample Usage</b>. A TimeoutSync can be used to obtain | |
22 * Timeouts for locks used in SyncCollections. For example: | |
23 * <pre> | |
24 * Mutex lock = new Mutex(); | |
25 * TimeoutSync timedLock = new TimeoutSync(lock, 1000); // 1 sec timeouts | |
26 * Set set = new SyncSet(new HashSet(), timedlock); | |
27 * try { | |
28 * set. add("hi"); | |
29 * } | |
30 * // SyncSets translate timeouts and other lock failures | |
31 * // to unsupported operation exceptions, | |
32 * catch (UnsupportedOperationException ex) { | |
33 * System.out.println("Lock failure"); | |
34 * } | |
35 * </pre> | |
36 * | |
37 * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] | |
38 * @see Sync | |
39 **/ | |
40 | |
41 | |
42 public class TimeoutSync implements Sync { | |
43 | |
44 protected final Sync sync_; // the adapted sync | |
45 protected final long timeout_; // timeout value | |
46 | |
47 /** | |
48 * Create a TimeoutSync using the given Sync object, and | |
49 * using the given timeout value for all calls to acquire. | |
50 **/ | |
51 | |
52 public TimeoutSync(Sync sync, long timeout) { | |
53 sync_ = sync; | |
54 timeout_ = timeout; | |
55 } | |
56 | |
57 public void acquire() throws InterruptedException { | |
58 if (!sync_.attempt(timeout_)) throw new TimeoutException(timeout_); | |
59 } | |
60 | |
61 public boolean attempt(long msecs) throws InterruptedException { | |
62 return sync_.attempt(msecs); | |
63 } | |
64 | |
65 public void release() { | |
66 sync_.release(); | |
67 } | |
68 | |
69 } |