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

    返回列表

  • 相关阅读:
    [BZOJ4876][ZJOI2017]线段树
    [FJOI2016]建筑师(斯特林数)
    WC2018伪题解
    [BZOJ3514]CodeChef MARCH14 GERALD07加强版(LCT+主席树)
    [BZOJ2594][WC2006]水管局长加强版(LCT+Kruskal)
    [洛谷3796]【模板】AC自动机(加强版)
    [洛谷3808]【模板】AC自动机(简单版)
    [BZOJ3261]最大异或和
    [BZOJ3439]Kpm的MC密码
    [POI2006]Periods of Words
  • 原文地址:https://www.cnblogs.com/new0801/p/6146686.html
Copyright © 2020-2023  润新知