583 |
|
} |
584 |
|
|
585 |
|
/** |
586 |
+ |
* awaitAdvance returns the current phase in child phasers |
587 |
+ |
*/ |
588 |
+ |
public void testAwaitAdvanceTieredPhaser() throws Exception { |
589 |
+ |
final Phaser parent = new Phaser(); |
590 |
+ |
final List<Phaser> zeroPartyChildren = new ArrayList<Phaser>(3); |
591 |
+ |
final List<Phaser> onePartyChildren = new ArrayList<Phaser>(3); |
592 |
+ |
for (int i = 0; i < 3; i++) { |
593 |
+ |
zeroPartyChildren.add(new Phaser(parent, 0)); |
594 |
+ |
onePartyChildren.add(new Phaser(parent, 1)); |
595 |
+ |
} |
596 |
+ |
final List<Phaser> phasers = new ArrayList<Phaser>(); |
597 |
+ |
phasers.addAll(zeroPartyChildren); |
598 |
+ |
phasers.addAll(onePartyChildren); |
599 |
+ |
phasers.add(parent); |
600 |
+ |
for (Phaser phaser : phasers) { |
601 |
+ |
assertEquals(-42, phaser.awaitAdvance(-42)); |
602 |
+ |
assertEquals(-42, phaser.awaitAdvanceInterruptibly(-42)); |
603 |
+ |
assertEquals(-42, phaser.awaitAdvanceInterruptibly(-42, SMALL_DELAY_MS, MILLISECONDS)); |
604 |
+ |
} |
605 |
+ |
|
606 |
+ |
for (Phaser child : onePartyChildren) |
607 |
+ |
assertEquals(0, child.arrive()); |
608 |
+ |
for (Phaser phaser : phasers) { |
609 |
+ |
assertEquals(-42, phaser.awaitAdvance(-42)); |
610 |
+ |
assertEquals(-42, phaser.awaitAdvanceInterruptibly(-42)); |
611 |
+ |
assertEquals(-42, phaser.awaitAdvanceInterruptibly(-42, SMALL_DELAY_MS, MILLISECONDS)); |
612 |
+ |
assertEquals(1, phaser.awaitAdvance(0)); |
613 |
+ |
assertEquals(1, phaser.awaitAdvanceInterruptibly(0)); |
614 |
+ |
assertEquals(1, phaser.awaitAdvanceInterruptibly(0, SMALL_DELAY_MS, MILLISECONDS)); |
615 |
+ |
} |
616 |
+ |
|
617 |
+ |
for (Phaser child : onePartyChildren) |
618 |
+ |
assertEquals(1, child.arrive()); |
619 |
+ |
for (Phaser phaser : phasers) { |
620 |
+ |
assertEquals(-42, phaser.awaitAdvance(-42)); |
621 |
+ |
assertEquals(-42, phaser.awaitAdvanceInterruptibly(-42)); |
622 |
+ |
assertEquals(-42, phaser.awaitAdvanceInterruptibly(-42, SMALL_DELAY_MS, MILLISECONDS)); |
623 |
+ |
assertEquals(2, phaser.awaitAdvance(0)); |
624 |
+ |
assertEquals(2, phaser.awaitAdvanceInterruptibly(0)); |
625 |
+ |
assertEquals(2, phaser.awaitAdvanceInterruptibly(0, SMALL_DELAY_MS, MILLISECONDS)); |
626 |
+ |
assertEquals(2, phaser.awaitAdvance(1)); |
627 |
+ |
assertEquals(2, phaser.awaitAdvanceInterruptibly(1)); |
628 |
+ |
assertEquals(2, phaser.awaitAdvanceInterruptibly(1, SMALL_DELAY_MS, MILLISECONDS)); |
629 |
+ |
} |
630 |
+ |
} |
631 |
+ |
|
632 |
+ |
/** |
633 |
|
* awaitAdvance returns when the phaser is externally terminated |
634 |
|
*/ |
635 |
|
public void testAwaitAdvance6() throws InterruptedException { |