📅  最后修改于: 2023-12-03 15:31:57.157000             🧑  作者: Mango
LinkedBlockingQueue
是一个线程安全的阻塞队列,具有FIFO(先进先出)的特性。它继承自 java.util.AbstractQueue
类,实现了 java.util.concurrent.BlockingQueue
接口。
drainTo
方法是 LinkedBlockingQueue
类中的一个重载方法,其定义如下:
public int drainTo(Collection<? super E> c)
该方法的作用是将 LinkedBlockingQueue
中的所有元素取出,放入 Collection
参数 c
中。方法返回 int
类型的值,表示实际取出的元素个数。
drainTo
方法的使用需要注意以下几点:
以下是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
public class Demo {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
for (int i = 1; i <= 5; i++) {
queue.offer(i);
}
List<Integer> list = new ArrayList<>();
int count = queue.drainTo(list);
System.out.println("取出元素个数:" + count);
System.out.println("取出的元素:" + list);
}
}
输出结果:
取出元素个数:5
取出的元素:[1, 2, 3, 4, 5]
以上代码演示了 LinkedBlockingQueue
的 drainTo
方法的基本使用方法。首先,定义了一个 LinkedBlockingQueue
实例,并向其中添加了5个元素。然后定义了一个 List
实例,调用 drainTo
方法将队列中所有元素取出放入 List
中,并将实际取出的元素个数赋值给变量 count
。最后,输出了取出的元素列表。
如果 LinkedBlockingQueue
中没有元素,将会立即返回0。可以通过以下示例代码演示:
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
List<Integer> list = new ArrayList<>();
int count = queue.drainTo(list);
System.out.println("取出元素个数:" + count);
System.out.println("取出的元素:" + list);
输出结果:
取出元素个数:0
取出的元素:[]
以上代码演示了 LinkedBlockingQueue
的 drainTo
方法在队列为空时的表现。
需要注意的是,drainTo
方法不会保证元素的顺序,即取出的元素顺序可能与插入的顺序不一致。如果需要保证元素的顺序,可以使用 poll
方法或 iterator
进行遍历操作。