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();
}
}
返回列表