📅  最后修改于: 2023-12-03 15:16:23.881000             🧑  作者: Mango
takeLast()
方法是LinkedBlockingDeque
类中的一个方法,它的作用是从队列中获取并移除最后一个元素。在调用这个方法时,如果队列为空,则会阻塞等待,直到队列中有了新的元素。如果线程被中断,则会抛出InterruptedException
。
public E takeLast() throws InterruptedException
无参数。
takeLast()
方法返回从队列中获取的并移除的最后一个元素。
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
public class TestTakeLast {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingDeque<String> deque = new LinkedBlockingDeque<>();
Thread thread = new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(2);
deque.addLast("element 1");
deque.addLast("element 2");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread.start();
String ele1 = deque.takeLast(); // 阻塞等待直到队列中有元素
System.out.println(ele1); // 输出:element 2
String ele2 = deque.takeLast(); // 阻塞等待直到队列中有元素
System.out.println(ele2); // 输出:element 1
}
}
在这个示例中,我们创建了一个LinkedBlockingDeque
对象,并开启了一个后台线程,它会在2秒后向队列中添加两个元素。在主线程中,我们调用了takeLast()
方法两次,分别获取并移除了队列中的“element 2”和“element 1”元素。由于后台线程在主线程调用takeLast()
方法之前添加了元素,因此这两个调用都会立即返回。如果后台线程没有添加元素,则这两个调用都会一直阻塞等待,直到后台线程添加元素为止。
takeLast()
方法可以用来消费队列中的元素,如果队列为空则会阻塞等待,在多线程环境中可以用来实现生产者消费者模型。在使用takeLast()
方法时,需要注意线程安全问题和异常处理。