Mercurial > hg > blitz_condensed
comparison src/EDU/oswego/cs/dl/util/concurrent/WaitableBoolean.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: WaitableBoolean.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 19Jun1998 dl Create public version | |
12 */ | |
13 | |
14 package EDU.oswego.cs.dl.util.concurrent; | |
15 | |
16 /** | |
17 * A class useful for offloading synch for boolean instance variables. | |
18 * | |
19 * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] | |
20 **/ | |
21 | |
22 public class WaitableBoolean extends SynchronizedBoolean { | |
23 | |
24 /** Make a new WaitableBoolean with the given initial value **/ | |
25 public WaitableBoolean(boolean initialValue) { super(initialValue); } | |
26 | |
27 | |
28 /** | |
29 * Make a new WaitableBoolean with the given initial value, | |
30 * and using the supplied lock. | |
31 **/ | |
32 public WaitableBoolean(boolean initialValue, Object lock) { | |
33 super(initialValue, lock); | |
34 } | |
35 | |
36 | |
37 public boolean set(boolean newValue) { | |
38 synchronized (lock_) { | |
39 lock_.notifyAll(); | |
40 return super.set(newValue); | |
41 } | |
42 } | |
43 | |
44 public boolean commit(boolean assumedValue, boolean newValue) { | |
45 synchronized (lock_) { | |
46 boolean success = super.commit(assumedValue, newValue); | |
47 if (success) lock_.notifyAll(); | |
48 return success; | |
49 } | |
50 } | |
51 | |
52 public boolean complement() { | |
53 synchronized (lock_) { | |
54 lock_.notifyAll(); | |
55 return super.complement(); | |
56 } | |
57 } | |
58 | |
59 public boolean and(boolean b) { | |
60 synchronized (lock_) { | |
61 lock_.notifyAll(); | |
62 return super.and(b); | |
63 } | |
64 } | |
65 | |
66 public boolean or(boolean b) { | |
67 synchronized (lock_) { | |
68 lock_.notifyAll(); | |
69 return super.or(b); | |
70 } | |
71 } | |
72 | |
73 public boolean xor(boolean b) { | |
74 synchronized (lock_) { | |
75 lock_.notifyAll(); | |
76 return super.xor(b); | |
77 } | |
78 } | |
79 | |
80 /** | |
81 * Wait until value is false, then run action if nonnull. | |
82 * The action is run with the synchronization lock held. | |
83 **/ | |
84 | |
85 public void whenFalse(Runnable action) throws InterruptedException { | |
86 synchronized (lock_) { | |
87 while (value_) lock_.wait(); | |
88 if (action != null) action.run(); | |
89 } | |
90 } | |
91 | |
92 /** | |
93 * wait until value is true, then run action if nonnull. | |
94 * The action is run with the synchronization lock held. | |
95 **/ | |
96 public void whenTrue(Runnable action) throws InterruptedException { | |
97 synchronized (lock_) { | |
98 while (!value_) lock_.wait(); | |
99 if (action != null) action.run(); | |
100 } | |
101 } | |
102 | |
103 /** | |
104 * Wait until value equals c, then run action if nonnull. | |
105 * The action is run with the synchronization lock held. | |
106 **/ | |
107 | |
108 public void whenEqual(boolean c, Runnable action) throws InterruptedException { | |
109 synchronized (lock_) { | |
110 while (!(value_ == c)) lock_.wait(); | |
111 if (action != null) action.run(); | |
112 } | |
113 } | |
114 | |
115 /** | |
116 * wait until value not equal to c, then run action if nonnull. | |
117 * The action is run with the synchronization lock held. | |
118 **/ | |
119 public void whenNotEqual(boolean c, Runnable action) throws InterruptedException { | |
120 synchronized (lock_) { | |
121 while (!(value_ != c)) lock_.wait(); | |
122 if (action != null) action.run(); | |
123 } | |
124 } | |
125 | |
126 } | |
127 |