32 |
|
private static class Sync extends AbstractQueuedSynchronizer { |
33 |
|
boolean isLocked() { return getState() == 1; } |
34 |
|
|
35 |
< |
public boolean tryAcquireExclusive(boolean isQueued, int acquires) { |
35 |
> |
public boolean tryAcquireExclusive(int acquires) { |
36 |
|
assert acquires == 1; // Does not use multiple acquires |
37 |
|
return compareAndSetState(0, 1); |
38 |
|
} |
57 |
|
|
58 |
|
private final Sync sync = new Sync(); |
59 |
|
public boolean tryLock() { |
60 |
< |
return sync.tryAcquireExclusive(false, 1); |
60 |
> |
return sync.tryAcquireExclusive(1); |
61 |
|
} |
62 |
|
public void lock() { |
63 |
|
sync.acquireExclusiveUninterruptibly(1); |
73 |
|
public boolean isLocked() { return sync.isLocked(); } |
74 |
|
public boolean hasQueuedThreads() { return sync.hasQueuedThreads(); } |
75 |
|
public boolean hasContended() { return sync.hasContended(); } |
76 |
+ |
public boolean isQueued(Thread t) { return sync.isQueued(t); } |
77 |
|
} |
78 |
|
|
79 |
|
/** |
150 |
|
t1.join(); |
151 |
|
t2.join(); |
152 |
|
} catch(Exception e){ |
153 |
+ |
unexpectedException(); |
154 |
+ |
} |
155 |
+ |
} |
156 |
+ |
|
157 |
+ |
/** |
158 |
+ |
* isQueued reports whether a thread is queued. |
159 |
+ |
*/ |
160 |
+ |
public void testIsQueued() { |
161 |
+ |
final Mutex lock = new Mutex(); |
162 |
+ |
Thread t1 = new Thread(new InterruptedLockRunnable(lock)); |
163 |
+ |
Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); |
164 |
+ |
try { |
165 |
+ |
assertFalse(lock.isQueued(t1)); |
166 |
+ |
assertFalse(lock.isQueued(t2)); |
167 |
+ |
lock.lock(); |
168 |
+ |
t1.start(); |
169 |
+ |
Thread.sleep(SHORT_DELAY_MS); |
170 |
+ |
assertTrue(lock.isQueued(t1)); |
171 |
+ |
t2.start(); |
172 |
+ |
Thread.sleep(SHORT_DELAY_MS); |
173 |
+ |
assertTrue(lock.isQueued(t1)); |
174 |
+ |
assertTrue(lock.isQueued(t2)); |
175 |
+ |
t1.interrupt(); |
176 |
+ |
Thread.sleep(SHORT_DELAY_MS); |
177 |
+ |
assertFalse(lock.isQueued(t1)); |
178 |
+ |
assertTrue(lock.isQueued(t2)); |
179 |
+ |
lock.unlock(); |
180 |
+ |
Thread.sleep(SHORT_DELAY_MS); |
181 |
+ |
assertFalse(lock.isQueued(t1)); |
182 |
+ |
assertFalse(lock.isQueued(t2)); |
183 |
+ |
t1.join(); |
184 |
+ |
t2.join(); |
185 |
+ |
} catch(Exception e){ |
186 |
|
unexpectedException(); |
187 |
|
} |
188 |
|
} |