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 访问队列的更多相关文章

  1. Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...

  2. 并发编程(八)—— Java 并发队列 BlockingQueue 实现之 ArrayBlockingQueue 源码分析

    开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现. 阻塞队列概要 阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列的阻塞 ...

  3. 细说并发5:Java 阻塞队列源码分析(下)

    上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  4. 细说并发4:Java 阻塞队列源码分析(上)

    上篇文章 趣谈并发3:线程池的使用与执行流程 中我们了解到,线程池中需要使用阻塞队列来保存待执行的任务.这篇文章我们来详细了解下 Java 中的阻塞队列究竟是什么. 读完你将了解: 什么是阻塞队列 七 ...

  5. java数据结构——队列、循环队列(Queue)

    每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...

  6. Java 并发系列之七:java 阻塞队列(7个)

    1. 基本概念 2. 实现原理 3. ArrayBlockingQueue 4. LinkedBlockingQueue 5. LinkedBlockingDeque 6. PriorityBlock ...

  7. Java并发指南11:解读 Java 阻塞队列 BlockingQueue

    解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...

  8. 10分钟搞定 Java 并发队列好吗?好的

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  9. java访问修饰符

    了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...

随机推荐

  1. pip: unsupported locale setting

    在终端里输入 $ export LC_ALL=C 可解决 http://stackoverflow.com/questions/36394101/pip-install-locale-error-un ...

  2. python中删除某个元素的3种方法

    python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...

  3. java开源即时通讯软件服务端openfire源码构建

    java开源即时通讯软件服务端openfire源码构建 本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件: 编译环境搭建 调试 ...

  4. IOS开发初体验

    IOS开发初体验 搭建开发环境 不多说什么了,开发环境的搭建太简单了,上App Store搜索XCode下载就行了,说多了都是眼泪 创建第一个IOS项目--HolleIOS 创建工程 选择工程创建位置 ...

  5. iOS遍历数组的同时删除元素

    我们在遍历可变数组时,最好不要做删除数组中元素的操作. 因为删除操作可能会引起数组容量的变化,导致数组越界等问题. 以前在使用for循环遍历的时候遇到过这个问题. 当时的做法是使用enumerateO ...

  6. JVM内存区域划分(JDK6/7/8中的变化)

    前言 Java程序的运行是通过Java虚拟机来实现的.通过类加载器将class字节码文件加载进JVM,然后根据预定的规则执行.Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同 ...

  7. CSS简单使用

    CSS简单使用 标签 : 前端技术 CSS(Cascading Style Sheet : 层叠样式表单)用来定义网页显示效果. 可以解决HTML代码对样式定义的重复,提高后期样式代码的可维护性,并增 ...

  8. Android 如何监听输入法关闭事件

    假设有如下界面(输入法的上面的输入区域是用Dialog实现的) 要求当输入法关闭的时候,Dialog也一起关闭,这样用户就不需要返回两次了. 网上找了很多资料都没有很好的解决这个问题,输入法是第三方程 ...

  9. java虚拟机 jvm 局部变量表实战

    java局部变量表是栈帧重要组中部分之一.他主要保存函数的参数以及局部的变量信息.局部变量表中的变量作用域是当前调用的函数.函数调用结束后,随着函数栈帧的销毁.局部变量表也会随之销毁,释放空间. 由于 ...

  10. android打包引用第三方jar出现的错误

    今天终于完成了近一个月的App开发工作,对程序进行混淆导出签名apk包时,却出现了如下的错误: Proguard returned with error code 1. See console Not ...