📅  最后修改于: 2023-12-03 14:42:51.363000             🧑  作者: Mango
在Java中,PriorityBlockingQueue是一个实现了优先级队列的线程安全类,它实现了BlockingQueue接口。PriorityBlockingQueue中每个元素都有优先级,优先级通过比较器来确定。put(E e)方法是PriorityBlockingQueue类中用于将元素插入队列中的方法,本文将对其进行介绍。
public void put(E e) throws InterruptedException
将指定元素插入到PriorityBlockingQueue中,如果队列达到容量上限,则该方法将阻塞直到队列中有空间再继续添加元素。
插入元素后,如果该元素比队列中的其他元素优先级更高,则会将其排在队列的头部,否则插入到队列的尾部。
下面的示例演示了如何使用PriorityBlockingQueue的put()方法向队列中添加元素。
import java.util.concurrent.PriorityBlockingQueue;
public class PriorityBlockingQueuePutExample {
public static void main(String[] args) throws InterruptedException {
// 创建一个优先级为String长度的PriorityBlockingQueue
PriorityBlockingQueue<String> queue = new PriorityBlockingQueue<>(10, (s1, s2) -> s1.length() - s2.length());
// 向队列中插入元素
queue.put("Hello");
queue.put("World");
queue.put("I");
queue.put("am");
queue.put("a");
queue.put("Java");
queue.put("programmer");
// 输出队列元素
System.out.println(queue);
}
}
[I, am, a, Hello, Java, World, programmer]
根据我们给定的比较器,长度更短的字符串优先级更高,因此最终输出结果中,短字符串排在了前面。
PriorityBlockingQueue的put()方法可以将元素插入到队列中,根据比较器的优先级来判断元素的插入位置,如果队列已满,则将一直阻塞到有空间为止。需要注意的是,当线程在put()方法执行过程中被中断,会抛出InterruptedException异常。