MinerQueue.java 访问队列
package com.iteye.injavawetrust.miner; import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
* 访问队列
*
* @author InJavaWeTrust
*
*/
public class MinerQueue { private static final Log LOG = LogFactory.getLog(MinerQueue.class); /**
* URL队列 保证每一个URL只访问一次
*/
private static volatile Set<String> urlSet = new HashSet<String>();
/**
* 待访问队列<br>
* 爬取页面线程从这里取数据
*/
private static volatile Queue<MinerUrl> unVisited = new LinkedList<MinerUrl>();
/**
* 等待提取URL的分析页面队列<br>
* 解析页面线程从这里取数据
*/
private static volatile Queue<Html> waitingMisering = new LinkedList<Html>();
/**
* 存储队列<br>
* 存储线程从这里取数据
*/
private static volatile Queue<Html> store = new LinkedList<Html>();
/**
* 添加到存储队列
* @param html 爬取页面
*/
public synchronized static void addStore(Html html) {
store.add(html);
}
/**
* 存储队列出队列
* @return 爬取页面
*/
public synchronized static Html storePoll() {
return store.poll();
}
/**
* 存储队列是否为空
* @return
*/
public static boolean storeIsEmpty() {
return store.isEmpty();
}
/**
* 添加到等待提取URL的分析页面队列
* @param html
*/
public synchronized static void addWaitingMisering(Html html) {
waitingMisering.add(html);
}
/**
* 等待提取URL的分析页面出队列
* @return
*/
public synchronized static Html waitingMiseringPoll() {
return waitingMisering.poll();
}
/**
* 等待提取URL的分析页面队列大小
* @return
*/
public static int waitingMiseringSize() {
return waitingMisering.size();
}
/**
* 等待提取URL的分析页面队列是否为空
* @return true-空;false-非空
* @return
*/
public static boolean waitingMiseringIsEmpty(){
return waitingMisering.isEmpty();
}
/**
* 添加到URL队列
* @param url
*/
public synchronized static void addUrlSet(String url) {
urlSet.add(url);
}
/**
* 获得URL队列大小
* @return
*/
public static int getUrlSetSize() {
return urlSet.size();
}
/**
* 得到待访问队列
* @return
*/
public static Queue<MinerUrl> getUnVisited() {
return unVisited;
}
/**
* 待访问出队列
* @return
*/
public synchronized static MinerUrl unVisitedPoll() {
return unVisited.poll();
}
/**
* 添加到待访问队列,每个URL只访问一次
* @param html
*/
public synchronized static void addUnVisited(MinerUrl minerUrl) {
if(null != minerUrl && !urlSet.contains(minerUrl.getUrl())) {
LOG.info("添加到待访问队列[" + minerUrl.getUrl() + "] 当前第[" + minerUrl.getDepth() + "]层 当前线程[" + Thread.currentThread().getName() + "]");
unVisited.add(minerUrl);
}
}
/**
* 判断待访问的队列是否为空
* @return true-空;false-非空
*/
public static boolean unVisitedIsEmpty() {
return unVisited.isEmpty();
}
/**
* 待访问的队列大小
* @return
*/
public static int unVisitedSize(){
return unVisited.size();
} }
MinerQueue.java 访问队列的更多相关文章
- Java消息队列-Spring整合ActiveMq
1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...
- 并发编程(八)—— Java 并发队列 BlockingQueue 实现之 ArrayBlockingQueue 源码分析
开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现. 阻塞队列概要 阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列的阻塞 ...
- 细说并发5:Java 阻塞队列源码分析(下)
上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
- 细说并发4:Java 阻塞队列源码分析(上)
上篇文章 趣谈并发3:线程池的使用与执行流程 中我们了解到,线程池中需要使用阻塞队列来保存待执行的任务.这篇文章我们来详细了解下 Java 中的阻塞队列究竟是什么. 读完你将了解: 什么是阻塞队列 七 ...
- java数据结构——队列、循环队列(Queue)
每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
- Java 并发系列之七:java 阻塞队列(7个)
1. 基本概念 2. 实现原理 3. ArrayBlockingQueue 4. LinkedBlockingQueue 5. LinkedBlockingDeque 6. PriorityBlock ...
- Java并发指南11:解读 Java 阻塞队列 BlockingQueue
解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...
- 10分钟搞定 Java 并发队列好吗?好的
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...
- java访问修饰符
了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...
随机推荐
- JQuery写的一个常见的banner
大致的布局如下: <div class="banner" > <div class="pic"> ...
- C++框架_之Qt的窗口部件系统的详解-上
C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...
- PHP 5 SimpleXML 函数
PHP SimpleXML 简介 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局. SimpleXML 转换 XML 文档到 SimpleX ...
- Python3 多线程
多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...
- Java语言程序设计-Markdown格式作业模板
Markdown格式作业模板如下,大家可以直接复制粘贴使用. 注意:作业中不能只写答案,题目本身也要出现.. # 1. 本章学习总结 你对于本章知识的学习总结 # 2. 书面作业 **Q1 java ...
- Swift中关于任意类型的数组
在Objc中你是不可以把一个非对象类型放入数组的,你必须将其"封箱",然后再放入数组. 在Swift中你可将非对象类型轻松放入数组: let ary = [1,2,3] 你可以明确 ...
- Apache shiro集群实现 (一) shiro入门介绍
近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很 ...
- 物料分类新增&更新
--新增 INV_ITEM_CATEGORY_PUB.Create_Category ( p_api_version IN NUMBER, p_init_msg_list IN VARCHAR2 DE ...
- introduction of velocity
一.velocity 简介 基于java 的模板引擎,apache 旗下的开源软件项目. 目的在于隔离 表示层和业务逻辑层,当然现在做的不仅仅是这些. 二.应用场景 web 应用程序:创建html页面 ...
- memcached实战系列(四)memcached stats命令 memcached优化
memcached提供一系列的命令进行优化的查看,方便我们调整我们的存储策略,查看我们的使用率,内存的使用率以及浪费情况.常用的命令有stats.stats settings.stats items. ...