package us.codecraft.webmagic.scheduler;
import org.apache.log4j.Logger;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Task;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 内存队列实现的线程安全Scheduler。<br>
* @author code4crafter@gmail.com <br>
* Date: 13-4-21
* Time: 下午1:13
*/
public class QueueScheduler implements Scheduler {
private Logger logger = Logger.getLogger(getClass());
private BlockingQueue<Request> queue = new LinkedBlockingQueue<Request>();
private Set<String> urls = new HashSet<String>();
@Override
public synchronized void push(Request request,Task task) {
if (logger.isDebugEnabled()){
logger.debug("push to queue "+request.getUrl());
}
if (urls.add(request.getUrl())){
queue.add(request);
}
}
@Override
public synchronized Request poll(Task task) {
return queue.poll();
}
}