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. Spring-cloud (七)自定义HystrixCommand

    前提 1.在继续学习Hystrix之前,向关注本人博客的各位致歉 由于之前的项目起名以及服务之间的名称不是很规范,所以我修改了这些名称方便后来的代码管理,这些代码可以在本人github中找到,这里贴出 ...

  2. Python笔记十一(迭代器)

    这里我们要学会Iterable和Iterator. 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator f ...

  3. Python3 多线程

    多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...

  4. Python3 数字(Number)

    Python 解释器可以作为一个简单的计算器:您可以在解释器里输入一个表达式,它将输出表达式的值. 表达式的语法很直白: +, -, * 和/ 和在许多其它语言(如Pascal或C)里一样:括号可以用 ...

  5. leetcode之Largest Rectangle in Histogram

    问题来源:Largest Rectangle in Histogram 问题描述:给定一个长度为n的直方图,我们可以在直方图高低不同的长方形之间画一个更大的长方形,求该长方形的最大面积.例如,给定下述 ...

  6. Android开发之手把手教你写ButterKnife框架(二)

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52664112 本文出自:[余志强的博客] 上一篇博客Android开 ...

  7. Swift:消除Null值

    由于在现代编程语言中这个无所不在的概念,许多程序猿可能倾向于相信null值是一个必须存在的瑕疵,创建一个没有它的编程语言是不可能的.他们可能会惊奇那些许多没有null值活的也很好的语言,这带来的结果就 ...

  8. Scala:类,对象和特征(接口)

    http://blog.csdn.net/pipisorry/article/details/52902609 Scala类和对象 类是对象的抽象,而对象是类的具体实例.类是抽象的,不占用内存,而对象 ...

  9. 剑指Offer——知识点储备--Linux基本命令+Makefile

    剑指Offer--知识点储备–Linux基本命令 1.linux下查看进程占用cpu的情况(top): 格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 主要参 ...

  10. springMVC源码分析--HandlerAdapter(一)

    HandlerAdapter的功能实际就是执行我们的具体的Controller.Servlet或者HttpRequestHandler中的方法. 类结构如下: