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); } }
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); } }
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); } }
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); } }
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); } }
Exception: java.lang.NullPointerException Items in Queue are [Karan]
Referencia: