Java 中的 ArrayBlockingQueue drainTo()方法
原文:https://www . geeksforgeeks . org/arrayblockingqueue-drain to-method-in-Java/
ArrayBlockingQueue是有界的,阻塞队列存储由数组支持的内部元素。
- ArrayBlockingQueue类是 Java Collections 框架的成员。
- 有界意味着它将有一个固定的大小,你不能存储的元素数量超过队列的容量。
- 队列还遵循先进先出规则来存储和移除队列中的元素。
- 如果你试图把一个元素放到一个满的队列中,或者从一个空的队列中取出一个元素,那么这个队列就会阻塞你。
drainTo( 集合 c ) 方法从该队列中移除所有可用元素,并将它们添加到给定集合中。元素的数量也可以是固定的,通过提供元素的数量“n”作为该方法的第二个参数,需要排出这些元素。
根据传递给它的参数,有两种类型的 drainTo 方法:
1.drainTo()方法用于将所有元素转移到集合中。消耗操作比使用循环重复轮询这个队列更有效。当试图将元素添加到集合 c 时,也有可能遇到失败,因此当抛出相关异常时,失败元素可能既不出现在两个集合中,也不出现在两个集合中。如果您试图将队列排到自身,将引发 IllegalArgumentException。如果在操作过程中修改了指定的集合,则此操作的行为未定义。所以为了使用这样的方法,我们需要注意这种情况,这样我们就可以克服异常。
语法
public int drainTo(*Collection c*)
参数:该方法接受一个参数 c ,该参数是指要转移元素的集合
返回值:该方法返回排出的元素数量。
异常:该方法可能会抛出三种类型的异常:
- 不支持操作异常–如果指定集合不支持添加元素
- class castexception–如果该队列的某个元素的类阻止它被添加到指定的集合中
- 空指针异常–如果指定的集合为空
- IllegalArgumentException–如果指定的集合是这个队列,或者这个队列的某个元素的某些属性阻止它被添加到指定的集合中
下面的程序说明了 ArrayBlockingQueue 的 drainTo( Collection c )方法。
Java 语言(一种计算机语言,尤用于创建网站)
// Program to demonstrate drainTo(Collection c)
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
public class GFG {
public static void main(String[] args)
{
// Define capacity of ArrayBlockingQueue
int capacity = 10;
// Create object of ArrayBlockingQueue
ArrayBlockingQueue queue = new
ArrayBlockingQueue(capacity);
// Add elements to ArrayBlockingQueue
queue.add(23);
queue.add(32);
queue.add(45);
queue.add(12);
queue.add(27);
queue.add(67);
// Print queue before drainTo operation
System.out.println("Before drainTo Operation");
System.out.println("queue = " + queue);
// Create Collection object to
// tranfer elements
ArrayList list = new
ArrayList();
// Call drainTo method of queue
// and pass collection as parameter.
queue.drainTo(list);
// Print queue before drainTo operation
System.out.println("After drainTo Operation");
System.out.println("queue = " + queue);
System.out.println("collection = " + list);
}
}
Output:
Before drainTo Operation
queue = [23, 32, 45, 12, 27, 67]
After drainTo Operation
queue = []
collection = [23, 32, 45, 12, 27, 67]
2.drain to(Collection c,int maxElements ) 方法用于将固定数量的元素转移到集合中。传输指定数组的元素号后,阻塞队列只包含那些没有传输到集合的元素。该功能与上述功能相同,但有一些局限性。
语法:
public int drainTo(*Collection c, int maxElements*)
参数:该方法接受两个参数:
- c–这是指转移元素的集合。
- maxElements–这是整数类型,指的是要传输到集合中的元素的最大数量。
返回值: 耗尽的元素数量。
异常:
- 不支持操作异常–如果指定集合不支持添加元素
- class castexception–如果该队列的某个元素的类阻止它被添加到指定的集合中
- 空指针异常–如果指定的集合为空
- IllegalArgumentException–如果指定的集合是这个队列,或者这个队列的某个元素的某些属性阻止它被添加到指定的集合中
下面的程序说明了 ArrayBlockingQueue 的 drainTo(Collection c,int maxElements)方法的工作原理。
Java 语言(一种计算机语言,尤用于创建网站)
// Program Demonstrate drainTo(Collection c, int maxElements)
// method of ArrayBlockingQueue
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
public class GFG {
public static void main(String[] args)
{
// Define capacity of ArrayBlockingQueue
int capacity = 10;
// Create object of ArrayBlockingQueue
ArrayBlockingQueue queue = new
ArrayBlockingQueue(capacity);
// Add elements to ArrayBlockingQueue
queue.add("aman");
queue.add("sudhir");
queue.add("harsh");
queue.add("rahul");
queue.add("raunak");
// Print queue before drainTo operation
System.out.println("Before drainTo Operation");
System.out.println("queue = " + queue);
// Transfer elements from ArrayBlockingQueue;
ArrayList list = new ArrayList();
// Define no of elements to be tranfered
int maxElements = 3;
// Call drainTo method of queue and pass
// the collection as parameter.
queue.drainTo(list, maxElements);
// Print queue before drainTo operation
System.out.println("After drainTo Operation");
System.out.println("queue = " + queue);
System.out.println("collection = " + list);
}
}
Output:
Before drainTo Operation
queue = [aman, sudhir, harsh, rahul, raunak]
After drainTo Operation
queue = [rahul, raunak]
collection = [aman, sudhir, harsh]
参考:T2【https://docs . Oracle . com/javase/7/docs/API/Java/util/concurrent/arrayblockingqueue . html # drain to(Java . util . collection)T4】
版权属于:月萌API www.moonapi.com,转载请注明出处