📅  最后修改于: 2023-12-03 15:31:51.554000             🧑  作者: Mango
addLast()
方法是 ConcurrentLinkedDeque
类中的一个方法,用于在双端队列的末尾添加一个元素。
ConcurrentLinkedDeque
是一个线程安全的双端队列实现(Deque:双端队列),它没有容量限制,支持高效的并发访问。
addLast(E e)
方法定义如下:
public void addLast(E e)
addLast()
方法会将指定元素添加到双端队列的末尾。如果元素添加成功,则返回 true
;如果双端队列已满,则抛出 IllegalStateException
异常。
以下示例展示了如何使用 addLast()
方法向双端队列中添加元素:
import java.util.concurrent.ConcurrentLinkedDeque;
public class ConcurrentLinkedDequeAddLastExample {
public static void main(String[] args) {
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
queue.addLast("apple");
queue.addLast("banana");
queue.addLast("cherry");
System.out.println(queue); // prints [apple, banana, cherry]
}
}
在上述示例中,我们创建了一个 ConcurrentLinkedDeque
对象,然后调用 addLast()
方法向队列中添加了三个元素。最后,我们打印队列中的元素,得到了 [apple, banana, cherry]
。
由于 ConcurrentLinkedDeque
是线程安全的,因此可以在多线程环境中使用 addLast()
方法。
以下示例展示了如何在多线程环境中使用 addLast()
方法:
import java.util.concurrent.ConcurrentLinkedDeque;
public class ConcurrentLinkedDequeAddLastExample {
public static void main(String[] args) {
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
Thread producerThread1 = new Thread(() -> {
for (int i = 1; i <= 5; i++) {
queue.addLast("Element " + i);
System.out.println(Thread.currentThread().getName() + " added: Element " + i);
}
}, "Producer 1");
Thread producerThread2 = new Thread(() -> {
for (int i = 6; i <= 10; i++) {
queue.addLast("Element " + i);
System.out.println(Thread.currentThread().getName() + " added: Element " + i);
}
}, "Producer 2");
Thread consumerThread = new Thread(() -> {
while (true) {
String element = queue.pollFirst();
if (element != null) {
System.out.println(Thread.currentThread().getName() + " consumed: " + element);
}
}
}, "Consumer");
producerThread1.start();
producerThread2.start();
consumerThread.start();
}
}
在上述示例中,我们创建了两个生产者线程和一个消费者线程。每个生产者线程都会向队列中添加若干个元素,消费者线程则不断从队列中取出元素。可以看到,线程之间没有发生竞争条件,队列的操作是线程安全的。
addLast()
方法是 ConcurrentLinkedDeque
类中的一个方法,用于在双端队列的末尾添加一个元素。它是线程安全的,可以支持高效的并发访问。在多线程环境中使用时,无需加锁或手动同步。