📅  最后修改于: 2023-12-03 15:16:20.118000             🧑  作者: Mango
Java中的 ArrayBlockingQueue是一个基于数组实现的有界队列,可以安全地在多个线程之间共享数据。take()方法用于从队列的头部取出一个元素,并且阻塞直到队列非空。
E take() throws InterruptedException
该方法会返回队列头部的一个元素,如果队列为空,则会阻塞线程直到队列不为空为止。如果线程被中断,则会抛出InterruptedException。
import java.util.concurrent.ArrayBlockingQueue;
public class Example {
public static void main(String[] args) {
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(5);
// 创建一个生产者线程
Thread producer = new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
queue.put(i);
System.out.println("Producer puts " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 创建一个消费者线程
Thread consumer = new Thread(() -> {
try {
while (true) {
Integer value = queue.take();
System.out.println("Consumer takes " + value);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
producer.start();
consumer.start();
}
}
在上面的例子中,创建了一个生产者线程和一个消费者线程,并且它们共享同一个ArrayBlockingQueue对象。生产者线程会不断向队列中放入数据,而消费者线程会在队列非空时从队列中取出数据。
ArrayBlockingQueue的take()方法可以用于从队列头部取出一个元素,并且在队列为空时阻塞线程,直到队列不为空为止。在多线程环境下,它可以安全地共享数据,是一个非常有用的数据结构。