Método BlockingQueue offer() en Java con ejemplos

Hay dos tipos de método de oferta() para la interfaz BlockingQueue:
Nota : el método de oferta() de BlockingQueue se ha heredado de la clase Queue en Java.
 

oferta (E e, tiempo de espera prolongado, unidad TimeUnit)

El método de oferta (E e, tiempo de espera largo, unidad de unidad de tiempo) de BlockingQueue inserta el elemento pasado como parámetro al método al final de esta BlockingQueue si la cola no está llena. Esperará hasta un tiempo específico para que haya espacio disponible si BlockingQueue está lleno. El tiempo de espera especificado y la Unidad de tiempo para el tiempo se darán como parámetros para el método offer(). Entonces esperará hasta ese momento para que BlockingQueue elimine algunos elementos para que este método pueda agregar elementos a BlockingQueue.
Sintaxis: 
 

public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException

Parámetros: Este método acepta tres parámetros: 
 

  • e – el elemento que se insertará en BlockingQueue.
  • tiempo de espera : el tiempo hasta el cual el método de oferta esperará para insertar un nuevo elemento si la cola está llena.
  • unidad : la unidad de tiempo para el parámetro de tiempo de espera.

Valor devuelto: el método devuelve verdadero si la inserción del elemento es exitosa. De lo contrario, devuelve falso si transcurre el tiempo de espera especificado antes de que haya espacio disponible.
Excepción: este método arroja las siguientes excepciones:
 

  • NullPointerException : si el elemento especificado es nulo.
  • InterruptedException : si se interrumpe durante la espera.

Los siguientes programas ilustran el método de oferta (E e, tiempo de espera prolongado, unidad de unidad de tiempo) de la clase BlockingQueue:
Programa 1: 
 

Java

// Java Program Demonstrate
// offer(Element e, long timeout, TimeUnit unit)
// method of BlockingQueue.
 
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
 
public class GFG {
 
    // Main method
    public static void main(String[] args)
        throws InterruptedException
    {
        // define capacity of BlockingQueue
        int capacityOfQueue = 4;
 
        // create object of BlockingQueue
        BlockingQueue<Integer>
            BQ = new LinkedBlockingQueue<Integer>(capacityOfQueue);
 
        // Add 5 elements to BlockingQueue having
        // Timeout in seconds with value 5 secs in
        // offer(Element e, long timeout, TimeUnit unit)
        System.out.println("adding 32673821 "
                           + BQ.offer(32673821,
                                      5,
                                      TimeUnit.SECONDS));
        System.out.println("adding 88527183: "
                           + BQ.offer(88527183,
                                      5,
                                      TimeUnit.SECONDS));
        System.out.println("adding 431278539: "
                           + BQ.offer(431278539,
                                      5,
                                      TimeUnit.SECONDS));
        System.out.println("adding 351278693: "
                           + BQ.offer(351278693,
                                      5,
                                      TimeUnit.SECONDS));
        System.out.println("adding 647264: "
                           + BQ.offer(647264,
                                      5,
                                      TimeUnit.SECONDS));
 
        // print the elements of queue
        System.out.println("list of numbers of queue:"
                           + BQ);
 
        // now queue is full check remaining capacity of queue
        System.out.println("Empty spaces of queue : "
                           + BQ.remainingCapacity());
 
        // try to add more Integer
        boolean response = BQ.offer(2893476,
                                    5,
                                    TimeUnit.SECONDS);
        System.out.println("Adding new Integer 2893476 is successful: "
                           + response);
    }
}
Producción

adding 32673821 true
adding 88527183: true
adding 431278539: true
adding 351278693: true
adding 647264: false
list of numbers of queue:[32673821, 88527183, 431278539, 351278693]
Empty spaces of queue : 0
Adding new Integer 2893476 is successful: false

Programa 2: 
 

Java

// Java Program Demonstrate
// offer(Element e, long timeout, TimeUnit unit)
// method of BlockingQueue.
 
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
 
public class GFG {
 
    public static void main(String[] args)
        throws InterruptedException
    {
        // define capacity of BlockingQueue
        int capacityOfQueue = 4;
 
        // create object of BlockingQueue
        BlockingQueue<Integer>
            BQ = new LinkedBlockingQueue<Integer>(capacityOfQueue);
 
        // Add elements to BlockingQueue having
        // Timeout in seconds with value 5 secs in
        // offer(Element e, long timeout, TimeUnit unit)
        System.out.println("Adding 283239 in Queue :"
                           + BQ.offer(283239,
                                      5,
                                      TimeUnit.SECONDS));
 
        // try to put null value in offer method
        try {
 
            System.out.println("Adding null in Queue: "
                               + BQ.offer(null,
                                          5,
                                          TimeUnit.SECONDS));
        }
        catch (Exception e) {
 
            // print error details
            System.out.println("Exception: " + e);
        }
 
        // print elements of queue
        System.out.println("Items in Queue are "
                           + BQ);
    }
}
Producción: 

Adding 283239 in Queue :true
Exception: java.lang.NullPointerException
Items in Queue are [283239]

 

oferta(E e)

El método de oferta (E e) de BlockingQueue inserta el elemento e, pasado como parámetro, al final de esta BlockingQueue, si la cola tiene espacio, es decir, la cola no está llena. Si la cola está llena, la aplicación del método de oferta() no muestra ningún efecto porque BlockingQueue bloqueará el elemento que se insertará. El método de oferta() devuelve verdadero cuando la operación de adición a BlockingQueue es exitosa y falso si esta cola está llena. Este método es preferible al método add() porque el método add arroja un error cuando la cola está llena, pero el método offer() devuelve falso en tal situación.
Sintaxis: 
 

public boolean offer(E e)

Parámetros: este método toma un parámetro obligatorio e que es el elemento que se insertará en LinkedBlockingQueue.
Valor devuelto: este método devuelve verdadero si la inserción del elemento es exitosa. De lo contrario, devuelve falso .
Excepción: el método arroja NullPointerException si el elemento especificado es nulo.
Los siguientes programas ilustran el método de oferta() de la clase BlockingQueue
Programa 1: 
 

Java

// Java Program Demonstrate
// offer(Element e)
// method of BlockingQueue.
 
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
 
public class GFG {
 
    // Main method
    public static void main(String[] args)
    {
        // define capacity of BlockingQueue
        int capacityOfQueue = 4;
 
        // create object of BlockingQueue
        BlockingQueue<String>
            BQ = new LinkedBlockingQueue<String>(capacityOfQueue);
 
        // Add element to BlockingQueue using offer
        BQ.offer("dean");
        BQ.offer("kevin");
        BQ.offer("sam");
        BQ.offer("jack");
 
        // print the elements of queue
        System.out.println("list of names of queue:");
        System.out.println(BQ);
    }
}
Producción: 

list of names of queue:
[dean, kevin, sam, jack]

 

Programa 2:
 

Java

// Java Program Demonstrate
// offer(Element e)
// method of BlockingQueue.
 
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
 
public class GFG {
 
    // Main method
    public static void main(String[] args)
    {
        // define capacity of BlockingQueue
        int capacityOfQueue = 4;
 
        // create object of BlockingQueue
        BlockingQueue<Integer>
            BQ = new LinkedBlockingQueue<Integer>(capacityOfQueue);
 
        // Add element to BlockingQueue using offer
        BQ.offer(34567);
        BQ.offer(45678);
        BQ.offer(98323);
        BQ.offer(93758);
 
        // print the elements of queue
        System.out.println("list of numbers of queue:");
        System.out.println(BQ);
 
        // now queue is full check remaining capacity of queue
        System.out.println("Empty spaces of queue : "
                           + BQ.remainingCapacity());
 
        // try to add extra Integer
        boolean response = BQ.offer(2893476);
 
        System.out.println("Adding new Integer 2893476 is successful: "
                           + response);
 
        response = BQ.offer(456751);
 
        System.out.println("Adding new Integer 456751 is successful: "
                           + response);
    }
}
Producción

list of numbers of queue:
[34567, 45678, 98323, 93758]
Empty spaces of queue : 0
Adding new Integer 2893476 is successful: false
Adding new Integer 456751 is successful: false

Programa 3: Mostrar excepción lanzada por el método de oferta()
 

Java

// Java Program Demonstrate offer(E e)
// method of LinkedBlockingQueue
 
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
 
public class GFG {
 
    public static void main(String[] args)
        throws InterruptedException
    {
        // define capacity of BlockingQueue
        int capacityOfQueue = 4;
 
        // create object of BlockingQueue
        BlockingQueue<String> BQ
            = new LinkedBlockingQueue<String>(capacityOfQueue);
 
        // Add element using offer() method
        BQ.offer("Karan");
 
        // try to put null value in offer method
        try {
            BQ.offer(null);
        }
        catch (Exception e) {
            // print error details
            System.out.println("Exception: " + e);
        }
 
        // print elements of queue
        System.out.println("Items in Queue are "
                           + BQ);
    }
}
Producción: 

Exception: java.lang.NullPointerException
Items in Queue are [Karan]

 

Referencia: 
 

Publicación traducida automáticamente

Artículo escrito por gopaldave y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *