📅  最后修改于: 2023-12-03 15:01:54.437000             🧑  作者: Mango
Java中的LinkedTransferQueue是一个实现了TransferQueue接口的阻塞队列。 阻塞队列是指在添加元素或移除元素时,如果队列已满或者为空,就会阻塞线程,直到队列可以添加或移除元素。
LinkedTransferQueue中的take()方法使用可阻塞的方式,获取队首元素,如果队列为空则阻塞线程,直到有新的元素被加入队列。
public E take() throws InterruptedException
无。
取出的队首元素。
如果当前线程被中断,则抛出InterruptedException。
import java.util.concurrent.LinkedTransferQueue;
public class LinkedTransferQueueExample {
public static void main(String[] args) throws InterruptedException {
LinkedTransferQueue<String> queue = new LinkedTransferQueue<>();
// 生产者线程
Thread producer = new Thread(() -> {
try {
queue.transfer("Hello, TransferQueue!");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 消费者线程
Thread consumer = new Thread(() -> {
try {
System.out.println(queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
});
producer.start(); // 启动生产者线程
consumer.start(); // 启动消费者线程
producer.join();
consumer.join();
}
}
上面的示例中,我们首先创建了一个LinkedTransferQueue实例,并启动了一个生产者线程和一个消费者线程。 生产者线程向队列中添加元素,消费者线程则从队列中取出元素并打印出来。 在该示例中,take()方法使用阻塞方式获取队列头部元素。如果队列为空,则线程将一直阻塞,直到队列中有元素可用。
注意:由于take()方法会阻塞线程,因此我们必须要用join()方法等待线程的执行结果,以免主线程提前退出。