Hay dos tipos de método de oferta() para la clase LinkedBlockingQueue:
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 LinkedBlockingQueue inserta el elemento pasado como parámetro al método al final de esta LinkedBlockingQueue si la cola no está llena. Esperará hasta un tiempo específico para que haya espacio disponible si LinkedBlockingQueue 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(). Por lo tanto, esperará hasta ese momento para que LinkedBlockingQueue elimine algunos elementos para que este método pueda agregar elementos a LinkedBlockingQueue.
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 LinkedBlockingQueue.
- 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 LinkedBlockingQueue:
Programa 1: Cree LinkedBlockingQueue insertando los nombres de los estudiantes que usan el método de oferta (E e, tiempo de espera largo, unidad de unidad de tiempo) cuyo parámetro de unidad de tiempo se proporciona en segundos y el parámetro de tiempo de espera es 5 segundos.
// Java Program Demonstrate // offer(Element e, long timeout, TimeUnit unit) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class GFG { // Main method public static void main(String[] args) throws InterruptedException { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4; // create object of LinkedBlockingQueue LinkedBlockingQueue<Integer> linkedQueue = new LinkedBlockingQueue<Integer>(capacityOfQueue); // Add 5 elements to ArrayBlockingQueue having // Timeout in seconds with value 5 secs in // offer(Element e, long timeout, TimeUnit unit) System.out.println("adding 32673821 " + linkedQueue.offer(32673821, 5, TimeUnit.SECONDS)); System.out.println("adding 88527183: " + linkedQueue.offer(88527183, 5, TimeUnit.SECONDS)); System.out.println("adding 431278539: " + linkedQueue.offer(431278539, 5, TimeUnit.SECONDS)); System.out.println("adding 351278693: " + linkedQueue.offer(351278693, 5, TimeUnit.SECONDS)); System.out.println("adding 647264: " + linkedQueue.offer(647264, 5, TimeUnit.SECONDS)); // print the elements of queue System.out.println("list of numbers of queue:" + linkedQueue); // now queue is full check remaining capacity of queue System.out.println("Empty spaces of queue : " + linkedQueue.remainingCapacity()); // try to add more Integer boolean response = linkedQueue.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: Mostrar la excepción lanzada por el método de oferta (Elemento e, tiempo de espera prolongado, unidad de unidad de tiempo)
// Java Program Demonstrate // offer(Element e, long timeout, TimeUnit unit) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class GFG { public static void main(String[] args) throws InterruptedException { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4; // create object of LinkedBlockingQueue LinkedBlockingQueue<Integer> linkedQueue = new LinkedBlockingQueue<Integer>(capacityOfQueue); // Add elements to ArrayBlockingQueue having // Timeout in seconds with value 5 secs in // offer(Element e, long timeout, TimeUnit unit) System.out.println("Adding 283239 in Queue :" + linkedQueue.offer(283239, 5, TimeUnit.SECONDS)); // try to put null value in offer method try { System.out.println("Adding null in Queue: " + linkedQueue.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 " + linkedQueue); } }
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 LinkedBlockingQueue inserta el elemento e, pasado como parámetro, al final de esta LinkedBlockingQueue, 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 LinkedBlockingQueue bloqueará el elemento que se insertará. El método de oferta() devuelve verdadero cuando la operación de adición a LinkedBlockingQueue 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 LinkedBlockingQueue
Programa 1: Cree LinkedBlockingQueue insertando los nombres de los estudiantes usando el método de oferta().
// Java Program Demonstrate // offer(Element e) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; public class GFG { // Main method public static void main(String[] args) { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4; // create object of LinkedBlockingQueue LinkedBlockingQueue<String> linkedQueue = new LinkedBlockingQueue<String>(capacityOfQueue); // Add element to LinkedBlockingQueue using offer linkedQueue.offer("dean"); linkedQueue.offer("kevin"); linkedQueue.offer("sam"); linkedQueue.offer("jack"); // print the elements of queue System.out.println("list of names of queue:"); System.out.println(linkedQueue); } }
list of names of queue: [dean, kevin, sam, jack]
Programa 2: Comprobando si LinkedBlockingQueue está lleno, luego inserta un nuevo elemento o no.
// Java Program Demonstrate // offer(Element e) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; public class GFG { // Main method public static void main(String[] args) { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4; // create object of LinkedBlockingQueue LinkedBlockingQueue<Integer> linkedQueue = new LinkedBlockingQueue<Integer>(capacityOfQueue); // Add element to LinkedBlockingQueue using offer linkedQueue.offer(34567); linkedQueue.offer(45678); linkedQueue.offer(98323); linkedQueue.offer(93758); // print the elements of queue System.out.println("list of numbers of queue:"); System.out.println(linkedQueue); // now queue is full check remaining capacity of queue System.out.println("Empty spaces of queue : " + linkedQueue.remainingCapacity()); // try to add extra Integer boolean response = linkedQueue.offer(2893476); System.out.println("Adding new Integer 2893476 is successful: " + response); response = linkedQueue.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 Program Demonstrate offer(E e) // method of LinkedBlockingQueue import java.util.concurrent.LinkedBlockingQueue; public class GFG { public static void main(String[] args) throws InterruptedException { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4; // create object of LinkedBlockingQueue LinkedBlockingQueue<String> linkedQueue = new LinkedBlockingQueue<String>(capacityOfQueue); // Add element using offer() method linkedQueue.offer("Karan"); // try to put null value in offer method try { linkedQueue.offer(null); } catch (Exception e) { // print error details System.out.println("Exception: " + e); } // print elements of queue System.out.println("Items in Queue are " + linkedQueue); } }
Exception: java.lang.NullPointerException Items in Queue are [Karan]
Referencia:
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html#offer-E-long-java.util.concurrent.TimeUnit-
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html#offer-E-
Publicación traducida automáticamente
Artículo escrito por AmanSingh2210 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA