1、什么要将java的队列,因为java线程的实现其实就是依靠队列来实现的
2、Queue
Queue 提供了
offer(E e) // 插入元素到队列,如果容量不足,抛出异常
remove() //异常头元素,如果为空,抛出一次 相对的是poll() 如果为空,返回null
element() //查看头元素,不是异常,如果为空,抛出一次,相对的peek() 如果为空返回null;
3、BlockingQueue
put(E e) //玩队列添加一个元素,如果容量不知,阻塞等待,直到有剩余空间为止
take() //移除头,如果为空,阻塞,直到队列有新的元素进来
remainingCapacity() //剩余的空间
drainTo(Collection<? super E> c); //移除所有队列元素,添加到集合中(向上转型),比如
private static BlockingQueue<String> queue = new ArrayBlockingQueue(1000);
public static void main(String[] args) throws InterruptedException {
queue.put("hello");
List<String> list = new ArrayList<>();
queue.drainTo(list);
System.out.println(list.get(0));
}
4、BlockingDeque
putFirst(E e),putLast(E e) //放入到头和尾
takeFirst(),taskLast() //头和尾取元素
5、ArrayBlockingQueue 和 LinkedBlockingQueue
ArrayBlockingQueue 这种队列提供先进先出的队列,每次插入的元素必须在尾部。
LinkedBlockingQueue 是一种链表型的队列(意思是没放入一个元素到队列之前,必须创建一个Node节点)
6、DelayQueue
延迟队列,是做为一种延迟消费任务的队列形式,比如前面说的ScheduledThreadPoolExecutor 就是一种延迟消费的线程池的实现
public class BlockQunue implements Delayed{
private static DelayQueue<BlockQunue> delayQueue = new DelayQueue();
private String delay;
private long time ;
public BlockQunue(String delay, long time) {
this.delay = delay;
this.time = time+System.currentTimeMillis();
}
public String getDelay() {
return delay;
}
@Override
public long getDelay(TimeUnit unit) {
return time-System.currentTimeMillis();
}
@Override
public int compareTo(Delayed o) {
return 0;
}
public static void main(String[] args) throws InterruptedException {
BlockQunue qunue = new BlockQunue("hello",2000L); //2s延迟
delayQueue.offer(qunue);
System.out.println(delayQueue.take().getDelay());
}
}
本文详细介绍了Java中的队列实现,包括非阻塞队列Queue的基本操作如offer、remove及element等,并深入探讨了阻塞队列BlockingQueue的操作如put、take等。此外,还讨论了ArrayBlockingQueue和LinkedBlockingQueue的区别,以及如何使用DelayQueue实现延迟消费。
1350

被折叠的 条评论
为什么被折叠?



