Las Bibliotecas de JavaLas Bibliotecas de Java\CyclicBarrier (class) java.util.concurrentCyclicBarrier (class) java.util.concurrent\Ejemplo

Tres amigos se sincronizan regularmente. Además, tenemos una escucha global que registra la hora del encuentro.

class Amigo

import java.util.concurrent.CyclicBarrier;

 

public class Amigo extends Thread {

      private final String name;

      private final CyclicBarrier barrier;

 

      public Amigo(String name, CyclicBarrier barrier) {

            this.name = name;

            this.barrier = barrier;

      }

 

      public void run() {

            while (true) {

                  try {

                        sleep((int) (10000 * Math.random()));

                        System.out.println(name + " esperando ...");

                        barrier.await();

                  } catch (Exception e) {

                        e.printStackTrace();

                  }

            }

      }

}    

class Amigos

import java.util.Date;

import java.util.concurrent.CyclicBarrier;

 

public class Amigos {

      public static void main(String[] args) {

            Escucha escucha = new Escucha();

            CyclicBarrier cita = new CyclicBarrier(3, escucha);

            Amigo pedro = new Amigo("Pedro", cita);

            Amigo angel = new Amigo("Angel", cita);

            Amigo bruno = new Amigo("Bruno", cita);

 

            pedro.start();

            angel.start();

            bruno.start();

      }

 

      private static class Escucha implements Runnable {

            public void run() {

                  System.out.println(new Date());

            }

      }

}               

 

principio