296 |
|
} |
297 |
|
|
298 |
|
/** |
299 |
– |
* All threads block while a barrier is broken. |
300 |
– |
*/ |
301 |
– |
public void testReset_Leakage() throws InterruptedException { |
302 |
– |
final CyclicBarrier c = new CyclicBarrier(2); |
303 |
– |
final AtomicBoolean done = new AtomicBoolean(); |
304 |
– |
Thread t = newStartedThread(new CheckedRunnable() { |
305 |
– |
public void realRun() { |
306 |
– |
while (!done.get()) { |
307 |
– |
try { |
308 |
– |
while (c.isBroken()) |
309 |
– |
c.reset(); |
310 |
– |
|
311 |
– |
c.await(); |
312 |
– |
shouldThrow(); |
313 |
– |
} |
314 |
– |
catch (BrokenBarrierException | InterruptedException ok) {} |
315 |
– |
}}}); |
316 |
– |
|
317 |
– |
for (int i = 0; i < 4; i++) { |
318 |
– |
delay(timeoutMillis()); |
319 |
– |
t.interrupt(); |
320 |
– |
} |
321 |
– |
done.set(true); |
322 |
– |
t.interrupt(); |
323 |
– |
awaitTermination(t); |
324 |
– |
} |
325 |
– |
|
326 |
– |
/** |
299 |
|
* Reset of a non-broken barrier does not break barrier |
300 |
|
*/ |
301 |
|
public void testResetWithoutBreakage() throws Exception { |