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:访问权限最高,其修饰的类.类变 ...
随机推荐
- SAS中常见的数组函数
SAS中常见的数组函数有: dim dimk hbound hboundk lbound lboundk 数组函数计萁数组的维数.上下界,有利于写出可移植的程序,数组函数包括:dim(x) 求数组x第 ...
- Jupyter Notebook 添加目录
1. 安装 jupyter_contrib_nbextensions pip install jupyter_contrib_nbextensions 2. 配置 nbextension jupyt ...
- SceneKit一个3D场景角色的代码重构
SuperSpaceMan3D是一个以SceneKit为基础的小游戏项目,作者展示了用SceneKit开发3D游戏的强大威力.不过在实际运行时会发现有一些小bug,这里我们依次尝试将其修复 首先,当s ...
- SMON功能-SMON_SCN_TIME字典基表
SMON后台进程的作用还包括维护SMON_SCN_TIME基表. SMON_SCN_TIME基表用于记录过去时间段中SCN(system change number)与具体的时间戳(timestamp ...
- SQL Join各种内联外联说明
Visual Representation of SQL Joins C.L. Moffatt, 3 Feb 2009 CPOL 4.96 (406 votes) Rate this: This ...
- foxit pdf强制页面视图所有情况都为'合适宽度'
在左边的书签点击时,有时明明已经设置为合适宽度,但foxit会自动给你变为'合适页面'.真是莫名其妙的设置.好在可以这样更改:
- [ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel
使用extjs肯定少不了使用表格控件,用到表格,领导们(一般)还是惯于使用excel看数据,所以用到extjs表格的技术猿们肯定也会有导出表格excel这一个需求,本文主要针对如何在用extjs将gr ...
- Java编程思想阅读收获
15年8月份买了一本Java编程思想第四版中文版.之所以买中文版是因为我试读了同事的英文版发现自己英语水平还是有限,单词虽然认识,但对很多句子把握不准,这样看书太慢了,要理解英文还要理解技术有些hol ...
- Spring之MVC模块
Spring MVC的Controller用于处理用户的请求.Controller相当于Struts 1里的Action,他们的实现机制.运行原理都类似 Controller是个接口,一般直接继承Ab ...
- “出错了”和报告Bug的艺术
"出错了." 没有那句话能像"出错了"一样让程序员/开发者如此沮丧,心里翻江倒海,怒火一点即燃,还要死掉一大片脑细胞. 这句生硬的开场白通常标志着让开发者恐惧的 ...