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(); } }