DistributedLoadThrottleImpl.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:1k
源码类别:

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.core.throttle.impl;
  2. import net.javacoding.jspider.core.throttle.Throttle;
  3. /**
  4.  * Throttle implementation that forces at least x milliseconds between two
  5.  * subsequent requests on a certain host.
  6.  *
  7.  * $Id: DistributedLoadThrottleImpl.java,v 1.2 2003/02/27 16:47:50 vanrogu Exp $
  8.  *
  9.  * @author G黱ther Van Roey
  10.  */
  11. public class DistributedLoadThrottleImpl implements Throttle {
  12.     /** min. milliseconds between two subsequent calls. */
  13.     protected int milliseconds;
  14.     /** last allowed time for a fetch. */
  15.     protected long lastAllow;
  16.     /**
  17.      * Constructor taking the amount of milliseconds to wait between
  18.      * two subsequent requests as a parameter.
  19.      * @param milliseconds minimum nr of milliseconds
  20.      */
  21.     public DistributedLoadThrottleImpl(int milliseconds) {
  22.         this.milliseconds = milliseconds;
  23.         lastAllow = System.currentTimeMillis() - milliseconds;
  24.     }
  25.     /**
  26.      * This method will block spider threads until they're allowed
  27.      * to do a request.
  28.      */
  29.     public synchronized void throttle() {
  30.         long thisTime = System.currentTimeMillis();
  31.         long scheduledTime = lastAllow + milliseconds;
  32.         if (scheduledTime > thisTime) {
  33.             try {
  34.                 Thread.sleep(scheduledTime - thisTime);
  35.             } catch (InterruptedException e) {
  36.                 Thread.currentThread().interrupt();
  37.             }
  38.         }
  39.         lastAllow = System.currentTimeMillis();
  40.     }
  41. }