Las Bibliotecas de JavaLas Bibliotecas de Java\BlockingQueue (interface) java.util.concurrentBlockingQueue (interface) java.util.concurrent\Ejemplo

En este ejemplo, una tarea genera números de la serie de Fibonacci y se los pasa a otra para que los imprima.

class Fibonacci

public class Fibonacci {

    public static void main(String[] args) {

        BlockingQueue<Integer> cola=

                new LinkedBlockingDeque<Integer>();

        ProduceFibo productor= new ProduceFibo(cola);

        ConsumeFibo consumidor= new ConsumeFibo(cola);

 

        productor.start();

        consumidor.start();

    }

}

class ProduceFibo

public class ProduceFibo

        extends Thread {

    private int f1= 1;

    private int f2= 1;

    private final BlockingQueue<Integer> cola;

 

    public ProduceFibo(BlockingQueue<Integer> cola) {

        this.cola = cola;

    }

   

    @Override

    public void run() {

        try {

            while (true) {

                int fn= f1+f2;

                cola.put(fn);

                f1= f2;

                f2= fn;

                sleep(1000);

            }

        } catch (InterruptedException e) {

            // se acaba;

        }

    }

}

class ConsumeFibo

public class ConsumeFibo

        extends Thread {

    private final BlockingQueue<Integer> cola;

 

    public ConsumeFibo(BlockingQueue<Integer> cola) {

        this.cola = cola;

    }

 

    @Override

    public void run() {

        try {

            while (true) {

                int n = cola.take();

                System.out.println(n);

            }

        } catch (InterruptedException e) {

            // se acaba;

        }

    }

}

 

principio