【java】Queue
来源:互联网 发布:linux激活虚拟网卡 编辑:程序博客网 时间:2024/06/05 20:15
在java多线程应用中,队列的使用频率是非常高的。队列是一种先进先出的数据结构,它有两个基本的操作,在队列尾部添加一个元素以及从队列头部移除一个元素。如果向一个已经满了的阻塞队列中添加一个元素或者从一个空的阻塞队列中移除一个元素,都将会导致线程阻塞。
阻塞与非阻塞关注的是程序在等待调用结果(消息、返回值)的状态。阻塞调用指的是在调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回,而非阻塞调用指的是在不能立刻得到结果之前,该调用不会阻塞当前线程。
java语言中提供的线程安全队列可以分为阻塞队列和非阻塞队列,其中,阻塞队列的典型例子是LinkedBlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在应用中要根据实际需要选用阻塞队列和非阻塞队列。
LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性,一般用在生产者和消费者模型的开发中。它的地层采用链表的方式来实现的,采用锁机制来实现多线程同步,提供了一个构造方法来指定队列的大小,如果不指定大小,队列默认大小为int类型能够表示的最大值
ConcurrentLinkedQueue是一个基于链表实现的、无界的、线程安全的队列。无界表示它没有提供一个构造方法来指定队列的大小,为了能够提高并发量,它是通过更加细粒度锁的机制使得在多线程环境下需要对所有的数据进行锁定从而提高运行效率
package study;import java.util.LinkedList;import java.util.Queue;public class TestQueue { public static void main(String[] args) { Queue<String> queue = new LinkedList<String>(); queue.offer("Hello"); queue.offer("World!"); queue.offer("你好!"); System.out.println(queue.size()); String str; while((str=queue.poll())!=null){ System.out.print(str); } System.out.println(); System.out.println(queue.size()); }}
0 0
- Queue-java
- Java: Queue
- Java: Queue
- Queue [Java]
- Queue Java
- java Queue
- 【java】Queue
- Java - Queue Stack
- java Queue的使用
- java Queue 的用法
- 解读java.util.queue
- Java Queue Example
- 学习Java: Queue
- Java文件Queue实现
- java Queue 的用法
- java 队列Queue
- Java Queue队列
- java Queue 的用法
- 预防中文在mysql数据库乱码以及网页
- MyBatis(1)入门
- java实现gui界面的文件复制
- html标签的嵌套规则
- ios 约束(三)
- 【java】Queue
- C语言实验——保留字母
- JAVA求两个数的最小公倍数
- 关于java发送邮件操作
- 你就变成了我
- 《Java并发编程实战》读书笔记二:构建线程安全
- Java的poi技术读取Excel[2003-2007,2010]
- 【AJAX】ScriptManager和UpdatePanel的属性说明
- Web前端面试小记