MinerQueue.java 访问队列

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

}

返回列表

原文地址:https://www.cnblogs.com/new0801/p/6146686.html