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 { |
450 |
|
final ExecutorService e = Executors.newFixedThreadPool(nTasks); |
451 |
|
final Runnable awaiter = () -> { |
452 |
|
try { |
453 |
< |
if (ThreadLocalRandom.current().nextBoolean()) |
453 |
> |
if (randomBoolean()) |
454 |
|
barrier.await(); |
455 |
|
else |
456 |
|
barrier.await(LONG_DELAY_MS, MILLISECONDS); |