Java 类java.util.concurrent.Phaser 实例源码

项目:openjdk-jdk10    文件:Basic.java   
static Writer interruptibleWriterView(final StampedLock sl,
                                      final long timeout,
                                      final TimeUnit unit,
                                      final Phaser gate) {
    return new Writer("InterruptibleWriterView") { public void run() {
        if (gate != null ) toTheStartingGate(gate);
        Lock wl = sl.asWriteLock();
        try {
            if (timeout < 0)
                wl.lockInterruptibly();
            else
                wl.tryLock(timeout, unit);
            stamp(1L);  // got the lock
            check(!sl.isReadLocked());
            check(sl.isWriteLocked());
        } catch (Throwable x) { thrown(x);
        } finally { if (stamp() != 0L) wl.unlock(); } }};
}
项目:jdk8u-jdk    文件:ThreadBlockedCount.java   
private static void runTest() throws Exception {
    final Phaser p = new Phaser(2);

    blocking = new BlockingThread(p);
    blocking.start();

    blocked = new BlockedThread(p);
    blocked.start();

    try {
        blocking.join();

        testOk = checkBlocked();
        p.arriveAndAwaitAdvance(); // #5

    } catch (InterruptedException e) {
        System.err.println("Unexpected exception.");
        e.printStackTrace(System.err);
        throw e;
    }
}
项目:openjdk-jdk10    文件:Basic.java   
static Reader interruptibleReaderView(final StampedLock sl,
                                      final long timeout,
                                      final TimeUnit unit,
                                      final Phaser gate) {
    return new Reader("InterruptibleReaderView") { public void run() {
        if (gate != null ) toTheStartingGate(gate);
        final Lock rl = sl.asReadLock();

        try {
            if (timeout < 0)
                rl.lockInterruptibly();
            else
                rl.tryLock(timeout, unit);
            stamp(1L);  // got the lock
            check(sl.isReadLocked());
            check(!sl.isWriteLocked());
        } catch (Throwable x) { thrown(x);
        } finally { if (stamp() != 0L) rl.unlock(); } }};
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * arriveAndDeregister does not wait for others to arrive at barrier
 */
public void testArrive2() {
    final Phaser phaser = new Phaser();
    assertEquals(0, phaser.register());
    List<Thread> threads = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        assertEquals(0, phaser.register());
        threads.add(newStartedThread(new CheckedRunnable() {
            public void realRun() {
                assertEquals(0, phaser.arriveAndDeregister());
            }}));
    }

    for (Thread thread : threads)
        awaitTermination(thread);
    assertState(phaser, 0, 1, 1);
    assertEquals(0, phaser.arrive());
    assertState(phaser, 1, 1, 1);
}
项目:openjdk-jdk10    文件:Basic.java   
static Iterator<Writer> writerIterator(final StampedLock sl,
                                       final Phaser gate) {
    return new Iterator<Writer>() {
        int i = 0;
        boolean view = false;
        public boolean hasNext() { return true; }
        public Writer next() {
            switch ((i++)&7) {
                case 1: case 4: case 7:
                    return writer(sl, gate, view ^= true);
                case 2: case 5:
                    return interruptibleWriter(sl, -1, SECONDS, gate, view ^= true);
                default:
                    return interruptibleWriter(sl, LONG_DELAY_MS, MILLISECONDS, gate, view ^= true); }}
        public void remove() {throw new UnsupportedOperationException();}};
}
项目:jdk8u-jdk    文件:Basic.java   
private static void checkTerminated(final Phaser phaser) {
    check(phaser.isTerminated());
    int unarriverParties = phaser.getUnarrivedParties();
    int registeredParties = phaser.getRegisteredParties();
    int phase = phaser.getPhase();
    check(phase < 0);
    equal(phase, phaser.arrive());
    equal(phase, phaser.arriveAndDeregister());
    equal(phase, phaser.arriveAndAwaitAdvance());
    equal(phase, phaser.bulkRegister(10));
    equal(phase, phaser.register());
    try {
        equal(phase, phaser.awaitAdvanceInterruptibly(0));
        equal(phase, phaser.awaitAdvanceInterruptibly(0, 10, SECONDS));
    } catch (Exception ie) {
        unexpected(ie);
    }
    equal(phaser.getUnarrivedParties(), unarriverParties);
    equal(phaser.getRegisteredParties(), registeredParties);
}
项目:jdk8u-jdk    文件:Basic.java   
private static Iterator<Arriver> arriverIterator(final Phaser phaser) {
    return new Iterator<Arriver>() {
        int i = 0;
        public boolean hasNext() { return true; }
        public Arriver next() {
            switch ((i++)&7) {
                case 0: case 4:
                    return arriver(phaser);
                case 1: case 5:
                    return awaiter(phaser);
                case 2: case 6: case 7:
                    return awaiter(phaser, -1, SECONDS);
                default:
                    return awaiter(phaser, 30, SECONDS); }}
        public void remove() {throw new UnsupportedOperationException();}};
}
项目:jdk8u-jdk    文件:Basic.java   
static Reader interruptibleReader(final StampedLock sl,
                                  final long timeout,
                                  final TimeUnit unit,
                                  final Phaser gate) {
    return new Reader("InterruptibleReader") { public void run() {
        if (gate != null ) toTheStartingGate(gate);
        try {
            if (timeout < 0)
                stamp(sl.readLockInterruptibly());
            else
                stamp(sl.tryReadLock(timeout, unit));
            check(sl.validate(stamp()));
            check(sl.isReadLocked());
            check(!sl.isWriteLocked());
        } catch (Throwable x) { thrown(x);
        } finally { if (stamp() != 0L) sl.unlockRead(stamp()); } }};
}
项目:jdk8u-jdk    文件:Basic.java   
static Reader interruptibleReaderView(final StampedLock sl,
                                      final long timeout,
                                      final TimeUnit unit,
                                      final Phaser gate) {
    return new Reader("InterruptibleReaderView") { public void run() {
        if (gate != null ) toTheStartingGate(gate);
        final Lock rl = sl.asReadLock();

        try {
            if (timeout < 0)
                rl.lockInterruptibly();
            else
                rl.tryLock(timeout, unit);
            stamp(1L);  // got the lock
            check(sl.isReadLocked());
            check(!sl.isWriteLocked());
        } catch (Throwable x) { thrown(x);
        } finally { if (stamp() != 0L) rl.unlock(); } }};
}
项目:jdk8u-jdk    文件:Basic.java   
static Writer interruptibleWriter(final StampedLock sl,
                                  final long timeout,
                                  final TimeUnit unit,
                                  final Phaser gate) {
    return new Writer("InterruptibleWriter") { public void run() {
        if (gate != null ) toTheStartingGate(gate);
        try {
            if (timeout < 0)
                stamp(sl.writeLockInterruptibly());
            else
                stamp(sl.tryWriteLock(timeout, unit));
            check(sl.validate(stamp()));
            check(!sl.isReadLocked());
            check(sl.isWriteLocked());
        } catch (Throwable x) { thrown(x);
        } finally { if (stamp() != 0L) sl.unlockWrite(stamp()); } }};
}
项目:jdk8u-jdk    文件:Basic.java   
static Iterator<Writer> writerIterator(final StampedLock sl,
                                       final Phaser gate) {
    return new Iterator<Writer>() {
        int i = 0;
        boolean view = false;
        public boolean hasNext() { return true; }
        public Writer next() {
            switch ((i++)&7) {
                case 1: case 4: case 7:
                    return writer(sl, gate, view ^= true);
                case 2: case 5:
                    return interruptibleWriter(sl, -1, SECONDS, gate, view ^= true);
                default:
                    return interruptibleWriter(sl, 30, SECONDS, gate, view ^= true); }}
        public void remove() {throw new UnsupportedOperationException();}};
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * awaitAdvance continues waiting if interrupted before waiting
 */
public void testAwaitAdvanceAfterInterrupt() {
    final Phaser phaser = new Phaser();
    assertEquals(0, phaser.register());
    final CountDownLatch pleaseArrive = new CountDownLatch(1);

    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() {
            Thread.currentThread().interrupt();
            assertEquals(0, phaser.register());
            assertEquals(0, phaser.arrive());
            pleaseArrive.countDown();
            assertTrue(Thread.currentThread().isInterrupted());
            assertEquals(1, phaser.awaitAdvance(0));
            assertTrue(Thread.interrupted());
        }});

    await(pleaseArrive);
    assertThreadBlocks(t, Thread.State.WAITING);
    assertEquals(0, phaser.arrive());
    awaitTermination(t);

    Thread.currentThread().interrupt();
    assertEquals(1, phaser.awaitAdvance(0));
    assertTrue(Thread.interrupted());
}
项目:openjdk-jdk10    文件:ThreadBlockedCount.java   
private static void runTest() throws Exception {
    final Phaser p = new Phaser(2);

    blocking = new BlockingThread(p);
    blocking.start();

    blocked = new BlockedThread(p);
    blocked.start();

    try {
        blocking.join();

        testOk = checkBlocked();
        p.arriveAndAwaitAdvance(); // #5

    } catch (InterruptedException e) {
        System.err.println("Unexpected exception.");
        e.printStackTrace(System.err);
        throw e;
    }
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 *  awaitAdvance continues waiting if interrupted while waiting
 */
public void testAwaitAdvanceBeforeInterrupt() {
    final Phaser phaser = new Phaser();
    assertEquals(0, phaser.register());
    final CountDownLatch pleaseArrive = new CountDownLatch(1);

    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() {
            assertEquals(0, phaser.register());
            assertEquals(0, phaser.arrive());
            assertFalse(Thread.currentThread().isInterrupted());
            pleaseArrive.countDown();
            assertEquals(1, phaser.awaitAdvance(0));
            assertTrue(Thread.interrupted());
        }});

    await(pleaseArrive);
    assertThreadBlocks(t, Thread.State.WAITING);
    t.interrupt();
    assertEquals(0, phaser.arrive());
    awaitTermination(t);

    Thread.currentThread().interrupt();
    assertEquals(1, phaser.awaitAdvance(0));
    assertTrue(Thread.interrupted());
}
项目:openjdk-jdk10    文件:Basic.java   
private static void checkTerminated(final Phaser phaser) {
    check(phaser.isTerminated());
    int unarriverParties = phaser.getUnarrivedParties();
    int registeredParties = phaser.getRegisteredParties();
    int phase = phaser.getPhase();
    check(phase < 0);
    equal(phase, phaser.arrive());
    equal(phase, phaser.arriveAndDeregister());
    equal(phase, phaser.arriveAndAwaitAdvance());
    equal(phase, phaser.bulkRegister(10));
    equal(phase, phaser.register());
    try {
        equal(phase, phaser.awaitAdvanceInterruptibly(0));
        equal(phase, phaser.awaitAdvanceInterruptibly(0, 10, SECONDS));
    } catch (Exception ex) {
        unexpected(ex);
    }
    equal(phaser.getUnarrivedParties(), unarriverParties);
    equal(phaser.getRegisteredParties(), registeredParties);
}
项目:openjdk-jdk10    文件:TieredArriveLoops.java   
void test(String[] args) throws Throwable {
    final Phaser parent = new Phaser();
    final Phaser child1 = new Phaser(parent);
    final Phaser child2 = new Phaser(parent);

    Thread t1 = new Thread(runner(child1));
    Thread t2 = new Thread(runner(child2));
    t1.start();
    t2.start();

    for (int prevPhase = 0, phase; ; prevPhase = phase) {
        phase = child2.getPhase();
        check(phase >= prevPhase);
        if (System.nanoTime() - quittingTimeNanos > 0) {
            System.err.printf("phase=%d%n", phase);
            child1.forceTermination();
            break;
        }
    }

    t1.join();
    t2.join();
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * register on a subphaser that is currently empty succeeds, even
 * in the presence of another non-empty subphaser
 */
public void testRegisterEmptySubPhaser() {
    Phaser root = new Phaser();
    Phaser child1 = new Phaser(root, 1);
    Phaser child2 = new Phaser(root, 0);
    assertEquals(0, child2.register());
    assertState(root, 0, 2, 2);
    assertState(child1, 0, 1, 1);
    assertState(child2, 0, 1, 1);
    assertEquals(0, child2.arriveAndDeregister());
    assertState(root, 0, 1, 1);
    assertState(child1, 0, 1, 1);
    assertState(child2, 0, 0, 0);
    assertEquals(0, child2.register());
    assertEquals(0, child2.arriveAndDeregister());
    assertState(root, 0, 1, 1);
    assertState(child1, 0, 1, 1);
    assertState(child2, 0, 0, 0);
    assertEquals(0, child1.arriveAndDeregister());
    assertTerminated(root, 1);
    assertTerminated(child1, 1);
    assertTerminated(child2, 1);
}
项目:servlet4-demo    文件:Application.java   
/**
 * Start the command line runner.
 *
 * @return a CommandLineRunner
 */
@Bean
public CommandLineRunner run() {
  return args -> {
    String host = "localhost";
    String path = "/greeting?name=JavaLand";
    jettyClientDemo.performAsyncHttpRequest(host, http2Port, path);
    jettyClientDemo.performDefaultHttpRequest(host, http2Port, path);
    jettyClientDemo.performHttpRequestReceivePush(host, http2Port, path,
        new FuturePromise<>(), new Phaser(2));
  };
}
项目:servlet4-demo    文件:JettyClientDemo.java   
/**
 * Perform an http request and wait for a possibly incoming push promise.
 *
 * @param host           the hostname
 * @param port           the port
 * @param path           the request path
 * @param sessionPromise the session promise object
 * @param phaser         the phaser
 * @throws Exception may occur when client is started or stopped
 */
public void performHttpRequestReceivePush(
    String host, int port, String path,
    FuturePromise<Session> sessionPromise, Phaser phaser)
    throws Exception {

  http2Client.addBean(sslContextFactory);
  http2Client.start();

  http2Client.connect(sslContextFactory, new InetSocketAddress(host, port),
      new ServerSessionListener.Adapter(), sessionPromise);
  Session session = sessionPromise.get(5, TimeUnit.SECONDS);

  HttpFields requestFields = new HttpFields();
  requestFields.put("User-Agent", http2Client
      .getClass()
      .getName() + "/" + Jetty.VERSION);
  MetaData.Request metaData =
      new MetaData.Request("GET", new HttpURI("https://" + host + ":" + port + path),
          HttpVersion.HTTP_2, requestFields);
  HeadersFrame headersFrame = new HeadersFrame(metaData, null, true);
  session.newStream(headersFrame, new Promise.Adapter<>(), new StreamListener(phaser));

  phaser.awaitAdvanceInterruptibly(phaser.arrive(), 5, TimeUnit.SECONDS);

  http2Client.stop();
}
项目:openjdk-jdk10    文件:Basic.java   
private static Arriver arriver(final Phaser phaser) {
    return new Arriver() { public void run() {
        toTheStartingGate();

        try { phase(phaser.arrive()); }
        catch (Throwable result) { result(result); }}};
}
项目:openjdk-jdk10    文件:Race.java   
public static void main(String[] args) throws Exception {
    try (ServerSocket ss = new ServerSocket(0)) {
        final int port = ss.getLocalPort();
        final Phaser phaser = new Phaser(THREADS + 1);
        for (int i=0; i<100; i++) {
            final Socket s = new Socket("localhost", port);
            s.setSoLinger(false, 0);
            try (Socket sa = ss.accept()) {
                sa.setSoLinger(false, 0);
                final InputStream is = s.getInputStream();
                Thread[] threads = new Thread[THREADS];
                for (int j=0; j<THREADS; j++) {
                    threads[j] = new Thread() {
                    public void run() {
                        try {
                            phaser.arriveAndAwaitAdvance();
                            while (is.read() != -1)
                                Thread.sleep(50);
                        } catch (Exception x) {
                            if (!(x instanceof SocketException
                                  && x.getMessage().equalsIgnoreCase("socket closed")))
                                x.printStackTrace();
                            // ok, expect Socket closed
                        }
                    }};
                }
                for (int j=0; j<100; j++)
                    threads[j].start();
                phaser.arriveAndAwaitAdvance();
                s.close();
                for (int j=0; j<100; j++)
                    threads[j].join();
            }
        }
    }
}
项目:servlet4-demo    文件:JettyClientDemoTest.java   
@Before
public void setUp() {
  httpClient = mock(HttpClient.class);
  HTTP2Client http2Client = mock(HTTP2Client.class);
  contentResponse = mock(ContentResponse.class);
  request = mock(Request.class);
  SslContextFactory sslContextFactory = mock(SslContextFactory.class);
  session = mock(Session.class);
  phaser = mock(Phaser.class);

  sut = new JettyClientDemo(httpClient, http2Client, sslContextFactory);
}
项目:openjdk-systemtest    文件:PhaserTest.java   
public PhaserHelperThread(Phaser phaserIn, boolean awaitOthersIn, int phaseToWaitForIn, boolean allowInterruptIn, boolean expectInterruptIn, boolean deregisterTestIn)
{
    phaser = phaserIn;
    awaitOthers = awaitOthersIn;
    phaseToWaitFor = phaseToWaitForIn;
    allowInterrupt = allowInterruptIn;
    expectInterrupt = expectInterruptIn;
    deregisterTest = deregisterTestIn;

    // Register with the Phaser
    phaser.register();
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * arriveAndDeregister does not wait for others to arrive at barrier
 */
public void testArriveAndDeregister() {
    final Phaser phaser = new Phaser(1);
    for (int i = 0; i < 10; i++) {
        assertState(phaser, 0, 1, 1);
        assertEquals(0, phaser.register());
        assertState(phaser, 0, 2, 2);
        assertEquals(0, phaser.arriveAndDeregister());
        assertState(phaser, 0, 1, 1);
    }
    assertEquals(0, phaser.arriveAndDeregister());
    assertTerminated(phaser, 1);
}
项目:tally    文件:M3ReporterTest.java   
@Test
public void reporterAfterCloseNoThrow() {
    final MockM3Server server = new MockM3Server(new Phaser(), true, socketAddress);

    Thread serverThread = new Thread(new Runnable() {
        @Override
        public void run() {
            server.serve();
        }
    });

    try {
        serverThread.start();

        M3Reporter reporter = new M3Reporter.Builder(socketAddress)
            .service("test-service")
            .commonTags(DEFAULT_TAGS)
            .maxQueueSize(MAX_QUEUE_SIZE)
            .maxPacketSizeBytes(MAX_PACKET_SIZE_BYTES)
            .build();

        reporter.close();

        reporter.reportGauge("my-gauge", null, 4.2);

        reporter.flush();
    } finally {
        server.close();
    }
}
项目:openjdk-jdk10    文件:TieredArriveLoops.java   
Runnable runner(final Phaser p) {
    return new CheckedRunnable() { public void realRun() {
        int prevPhase = p.register();
        while (!p.isTerminated()) {
            int phase = p.awaitAdvance(p.arrive());
            if (phase < 0)
                return;
            equal(phase, (prevPhase + 1) & Integer.MAX_VALUE);
            int ph = p.getPhase();
            check(ph < 0 || ph == phase);
            prevPhase = phase;
        }
    }};
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * awaitAdvance returns the current phase
 */
public void testAwaitAdvance5() {
    final Phaser phaser = new Phaser(1);
    assertEquals(1, phaser.awaitAdvance(phaser.arrive()));
    assertEquals(1, phaser.getPhase());
    assertEquals(1, phaser.register());
    List<Thread> threads = new ArrayList<>();
    for (int i = 0; i < 8; i++) {
        final CountDownLatch latch = new CountDownLatch(1);
        final boolean goesFirst = ((i & 1) == 0);
        threads.add(newStartedThread(new CheckedRunnable() {
            public void realRun() {
                if (goesFirst)
                    latch.countDown();
                else
                    await(latch);
                phaser.arrive();
            }}));
        if (goesFirst)
            await(latch);
        else
            latch.countDown();
        assertEquals(i + 2, phaser.awaitAdvance(phaser.arrive()));
        assertEquals(i + 2, phaser.getPhase());
    }
    for (Thread thread : threads)
        awaitTermination(thread);
}
项目:Java-9-Concurrency-Cookbook-Second-Edition    文件:Main.java   
/**
 * Main method of the example
 * @param args
 */
public static void main(String[] args) {

    // Creates a Phaser with three participants
    Phaser phaser=new Phaser(3);

    // Creates 3 FileSearch objects. Each of them search in different directory
    FileSearch system=new FileSearch("C:\\Windows", "log", phaser);
    FileSearch apps=new FileSearch("C:\\Program Files","log",phaser);
    FileSearch documents=new FileSearch("C:\\Documents And Settings","log",phaser);

    // Creates a thread to run the system FileSearch and starts it
    Thread systemThread=new Thread(system,"System");
    systemThread.start();

    // Creates a thread to run the apps FileSearch and starts it
    Thread appsThread=new Thread(apps,"Apps");
    appsThread.start();

    // Creates a thread to run the documents  FileSearch and starts it
    Thread documentsThread=new Thread(documents,"Documents");
    documentsThread.start();
    try {
        systemThread.join();
        appsThread.join();
        documentsThread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.printf("Terminated: %s\n",phaser.isTerminated());

}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * arrive() returns a negative number if the Phaser is terminated
 */
public void testArrive3() {
    Phaser phaser = new Phaser(1);
    phaser.forceTermination();
    assertTerminated(phaser, 0, 1);
    assertEquals(0, phaser.getPhase() + Integer.MIN_VALUE);
    assertTrue(phaser.arrive() < 0);
    assertTrue(phaser.register() < 0);
    assertTrue(phaser.arriveAndDeregister() < 0);
    assertTrue(phaser.awaitAdvance(1) < 0);
    assertTrue(phaser.getPhase() < 0);
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * register() will increment the number of unarrived parties by
 * one and not affect its arrived parties
 */
public void testRegister1() {
    Phaser phaser = new Phaser();
    assertState(phaser, 0, 0, 0);
    assertEquals(0, phaser.register());
    assertState(phaser, 0, 1, 1);
}
项目:openjdk-jdk10    文件:Basic.java   
static Reader reader(final StampedLock sl, final Phaser gate) {
    return new Reader() { public void run() {
        if (gate != null ) toTheStartingGate(gate);
        stamp(sl.readLock());
        try {
            check(sl.validate(stamp()));
            check(sl.isReadLocked());
            check(!sl.isWriteLocked());
        } finally { sl.unlockRead(stamp()); } }};
}
项目:jdk8u-jdk    文件:SynchronizationStatistics.java   
/**
 * Tests that waiting on a single monitor properly increases the waited
 * count by 1 and the waited time by a positive number.
 */
private static void testWaitingOnSimpleMonitor() throws Exception {
    System.out.println("testWaitingOnSimpleMonitor");
    final Object lock1 = new Object();
    final Phaser p = new Phaser(2);
    LockerThread lt = newLockerThread(new Runnable() {
        @Override
        public void run() {
            p.arriveAndAwaitAdvance(); // phase[1]
            synchronized(lock1) {
                System.out.println("[LockerThread obtained Lock1]");
                try {
                    lock1.wait(300);
                } catch (InterruptedException ex) {
                    // ignore
                }
                p.arriveAndAwaitAdvance(); // phase[2]
            }
            p.arriveAndAwaitAdvance(); // phase[3]
        }
    });

    lt.start();
    ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
    synchronized(lock1) {
        p.arriveAndAwaitAdvance(); // phase[1]
        waitForThreadState(lt, Thread.State.BLOCKED);
    }
    p.arriveAndAwaitAdvance(); // phase[2]

    testWaited(ti1, () -> mbean.getThreadInfo(lt.getId()), 1);
    p.arriveAndDeregister(); // phase[3]

    lt.join();

    printok();
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * arriveAndDeregister returns the phase in which it leaves the
 * phaser in after deregistration
 */
public void testArriveAndDeregister6() {
    final Phaser phaser = new Phaser(2);
    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() {
            assertEquals(0, phaser.arrive());
        }});
    assertEquals(1, phaser.arriveAndAwaitAdvance());
    assertState(phaser, 1, 2, 2);
    assertEquals(1, phaser.arriveAndDeregister());
    assertState(phaser, 1, 1, 1);
    assertEquals(1, phaser.arriveAndDeregister());
    assertTerminated(phaser, 2);
    awaitTermination(t);
}
项目:jdk8u-jdk    文件:DoubleAdderDemo.java   
static void syncTest(int nthreads, int incs) {
    System.out.print("Synchronized ");
    Phaser phaser = new Phaser(nthreads + 1);
    SynchronizedDoubleAdder a = new SynchronizedDoubleAdder();
    for (int i = 0; i < nthreads; ++i)
        pool.execute(new SyncTask(a, phaser, incs));
    report(nthreads, incs, timeTasks(phaser), a.sum());
}
项目:jdk8u-jdk    文件:DoubleAdderDemo.java   
static void adderTest(int nthreads, int incs) {
    System.out.print("DoubleAdder  ");
    Phaser phaser = new Phaser(nthreads + 1);
    DoubleAdder a = new DoubleAdder();
    for (int i = 0; i < nthreads; ++i)
        pool.execute(new AdderTask(a, phaser, incs));
    report(nthreads, incs, timeTasks(phaser), a.sum());
}
项目:openjdk-jdk10    文件:Basic.java   
private static Awaiter awaiter(final Phaser phaser,
                               final long timeout,
                               final TimeUnit unit) {
    return new Awaiter("InterruptibleWaiter") { public void run() {
        toTheStartingGate();

        try {
            if (timeout < 0)
                phase(phaser.awaitAdvanceInterruptibly(phaser.arrive()));
            else
                phase(phaser.awaitAdvanceInterruptibly(phaser.arrive(),
                                                 timeout,
                                                 unit));
        } catch (Throwable result) { result(result); }}};
}
项目:jdk8u-jdk    文件:LongAdderDemo.java   
static void casTest(int nthreads, int incs) {
    System.out.print("AtomicLong ");
    Phaser phaser = new Phaser(nthreads + 1);
    AtomicLong a = new AtomicLong();
    for (int i = 0; i < nthreads; ++i)
        pool.execute(new CasTask(a, phaser, incs));
    report(nthreads, incs, timeTasks(phaser), a.get());
}
项目:jdk8u-jdk    文件:LongAdderDemo.java   
static void adderTest(int nthreads, int incs) {
    System.out.print("LongAdder  ");
    Phaser phaser = new Phaser(nthreads + 1);
    LongAdder a = new LongAdder();
    for (int i = 0; i < nthreads; ++i)
        pool.execute(new AdderTask(a, phaser, incs));
    report(nthreads, incs, timeTasks(phaser), a.sum());
}
项目:openjdk-jdk10    文件:GetMacAddress.java   
public static void main(String[] args) throws Exception {
    List<NetworkInterface> toTest = getNetworkInterfacesAsStream()
                    .filter(hasHardwareAddress)
                    .collect(Collectors.toList());

    ExecutorService executor = Executors.newFixedThreadPool(NUM_THREADS);

    for (NetworkInterface ni : toTest) {
        Phaser startingGate = new Phaser(NUM_THREADS);
        System.out.println("Testing: " + ni.getName());
        List<Callable<Exception>> list = new ArrayList<>();
        for (int i = 0; i < NUM_THREADS; i++)
            list.add(new GetMacAddress(ni, ni.getName() + "-Thread-" + i, startingGate));
        List<Future<Exception>> futures = executor.invokeAll(list);
        for (Future<Exception> f : futures) {
            if (f.get() != null)
                f.get().printStackTrace(System.out);
        }
        if (failed)
            break;
    }
    executor.shutdownNow();
    if (!failed) {
        System.out.println("PASSED - Finished all threads");
    } else {
        throw new RuntimeException("Failed");
    }
}
项目:openjdk-jdk10    文件:PhaserTest.java   
/**
 * arrive() on a registered phaser increments phase.
 */
public void testArrive1() {
    Phaser phaser = new Phaser(1);
    assertState(phaser, 0, 1, 1);
    assertEquals(0, phaser.arrive());
    assertState(phaser, 1, 1, 1);
}