java队列ConcurrentLinkedQueue的使用
来源:互联网 发布:写故事 知乎 编辑:程序博客网 时间:2024/05/22 05:18
ConcurrentLinkedQueue队列是一种先进先出模式的队列,下面演示一个demo:
先建立一个测试pojo,Log.java两个字段,加上get、set方法
private Date date;
private String value;
然后建立队列类,如下:
package com.newer.queue;
import java.util.Date;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
* 用于记录日志的队列,ConcurrentLinkedQueue <br/>
* 此队列按照 FIFO(先进先出)原则对元素进行排序,详见J2SE_API或JDK
* @author RSun
* 2012-2-22下午05:05:19
*/
public class SystemLogQueue {
private static Queue<Log> log_Queue;
static{
if (null == log_Queue) {
log_Queue = new ConcurrentLinkedQueue<Log>(); //基于链接节点的无界线程安全队列
}
}
/** 初始化创建队列 **/
public static void init() {
if (null == log_Queue) {
log_Queue = new ConcurrentLinkedQueue<Log>(); //基于链接节点的无界线程安全队列
}
}
/**
* 添加到队列方法,将指定元素插入此队列的尾部。
* @param log Log对象
* @return 成功返回true,否则抛出 IllegalStateException
*/
public static boolean add(Log log) {
return (log_Queue.add(log));
}
/** 获取并移除此队列的头 ,如果此队列为空,则返回 null */
public static Log getPoll() {
return (log_Queue.poll());
}
/** 获取但不移除此队列的头;如果此队列为空,则返回 null **/
public static Log getPeek() {
return (log_Queue.peek());
}
/** 判断此队列是否有元素 ,没有返回true **/
public static boolean isEmpty() {
return (log_Queue.isEmpty());
}
/** 获取size,速度比较慢 **/
public static int getQueueSize() {
return (log_Queue.size());
}
public static void main(String[] args) {
System.out.println("队列是否有元素:" + !isEmpty());
Log log = new Log();
log_Queue.add(log);
System.out.println("队列是否有元素:" + !isEmpty());
Log log2 = new Log();
log2.setDate(new Date());
log2.setValue("哈哈哈");
log_Queue.add(log2);
System.out.println("队列元素个数:" + getQueueSize());
Log l = getPeek();
System.out.println("\n获取队列数据:" + l.getValue() + "---" + l.getDate());
System.out.println("队列元素个数:" + getQueueSize());
for (int i = 0; i < 2; i++) {
Log l2 = getPoll();
if(l2 != null){
System.out.println("\n获取队列数据并删除:" + l2.getValue() + "---" + l2.getDate());
}
System.out.println("队列元素个数:" + getQueueSize());
}
// 队列是否有元素:false
// 队列是否有元素:true
// 队列元素个数:2
// 获取队列数据:null---null
// 队列元素个数:2
// 获取队列数据并删除:null---null
// 队列元素个数:1
// 获取队列数据并删除:哈哈哈---Thu Nov 15 13:58:02 CST 2012
// 队列元素个数:0
}
}
先建立一个测试pojo,Log.java两个字段,加上get、set方法
private Date date;
private String value;
然后建立队列类,如下:
package com.newer.queue;
import java.util.Date;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
* 用于记录日志的队列,ConcurrentLinkedQueue <br/>
* 此队列按照 FIFO(先进先出)原则对元素进行排序,详见J2SE_API或JDK
* @author RSun
* 2012-2-22下午05:05:19
*/
public class SystemLogQueue {
private static Queue<Log> log_Queue;
static{
if (null == log_Queue) {
log_Queue = new ConcurrentLinkedQueue<Log>(); //基于链接节点的无界线程安全队列
}
}
/** 初始化创建队列 **/
public static void init() {
if (null == log_Queue) {
log_Queue = new ConcurrentLinkedQueue<Log>(); //基于链接节点的无界线程安全队列
}
}
/**
* 添加到队列方法,将指定元素插入此队列的尾部。
* @param log Log对象
* @return 成功返回true,否则抛出 IllegalStateException
*/
public static boolean add(Log log) {
return (log_Queue.add(log));
}
/** 获取并移除此队列的头 ,如果此队列为空,则返回 null */
public static Log getPoll() {
return (log_Queue.poll());
}
/** 获取但不移除此队列的头;如果此队列为空,则返回 null **/
public static Log getPeek() {
return (log_Queue.peek());
}
/** 判断此队列是否有元素 ,没有返回true **/
public static boolean isEmpty() {
return (log_Queue.isEmpty());
}
/** 获取size,速度比较慢 **/
public static int getQueueSize() {
return (log_Queue.size());
}
public static void main(String[] args) {
System.out.println("队列是否有元素:" + !isEmpty());
Log log = new Log();
log_Queue.add(log);
System.out.println("队列是否有元素:" + !isEmpty());
Log log2 = new Log();
log2.setDate(new Date());
log2.setValue("哈哈哈");
log_Queue.add(log2);
System.out.println("队列元素个数:" + getQueueSize());
Log l = getPeek();
System.out.println("\n获取队列数据:" + l.getValue() + "---" + l.getDate());
System.out.println("队列元素个数:" + getQueueSize());
for (int i = 0; i < 2; i++) {
Log l2 = getPoll();
if(l2 != null){
System.out.println("\n获取队列数据并删除:" + l2.getValue() + "---" + l2.getDate());
}
System.out.println("队列元素个数:" + getQueueSize());
}
// 队列是否有元素:false
// 队列是否有元素:true
// 队列元素个数:2
// 获取队列数据:null---null
// 队列元素个数:2
// 获取队列数据并删除:null---null
// 队列元素个数:1
// 获取队列数据并删除:哈哈哈---Thu Nov 15 13:58:02 CST 2012
// 队列元素个数:0
}
}
- java队列ConcurrentLinkedQueue的使用
- java队列BlockingQueue和ConcurrentLinkedQueue多线程并发、以及CountDownLatch与CyclicBarrier的使用
- 如何正确的使用java.util.ConcurrentLinkedQueue
- Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析
- Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析
- ConcurrentLinkedQueue的使用
- (原创)JAVA阻塞队列LinkedBlockingQueue 以及非阻塞队列ConcurrentLinkedQueue 的区别
- JAVA阻塞队列LinkedBlockingQueue 以及非阻塞队列ConcurrentLinkedQueue 的区别
- JAVA阻塞队列LinkedBlockingQueue 以及非阻塞队列ConcurrentLinkedQueue 的区别
- [JAVA]线程同步队列 LinkedBlockingQueue ConcurrentLinkedQueue
- Java ConcurrentLinkedQueue队列线程安全操作
- java-并发集合-并发队列 ConcurrentLinkedQueue 演示
- Java多线程--并发中集合的使用之ConcurrentLinkedQueue
- 高效读写的队列:深度剖析ConcurrentLinkedQueue
- 使用ConcurrentLinkedQueue惨痛的教训
- 使用ConcurrentLinkedQueue惨痛的教训
- ConcurrentLinkedQueue 和CountDownLatch 的使用
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
- iOS私有API
- 93C46驱动
- 关于Layer的一些认识
- Win8被指无视民意 苹果生态过时
- eclipse 正则替换
- java队列ConcurrentLinkedQueue的使用
- HTML5至少目前有5件事做不成
- ASIHTTPRequest类库简介和使用说明
- Android 启动过程
- CRM八面体:了解客户关系管理的结构
- Python实用技巧-成为Pythoner必经之路
- 退出时杀死本进程
- Gerrit多次commit造成多次review请求的解决方法
- vs2010怎么显示行数