SpiderDone类的实现

原创 2008年10月01日 21:49:00

 首先说明一下SpiderDone类的目的:

由于编写大型的Spider程序需要很多并发的线程,所以要知道Spider何时完成还是比较难的。而SpiderDone类正好可以实现这个功能。

最重要的两个方法:

synchronized public void workerBegin();//每执行一次,线程数量加一

synchronized public void workerEnd();//每执行一个,线程数量减一;

具体代码如下:

  1. package com.heaton.bot;
  2. /**
  3.  * This is a very simple object that
  4.  * allows the spider to determine when
  5.  * it is done. This object implements(实现)
  6.  * a simple lock(锁) that the spider class
  7.  * can wait on to determine completion.
  8.  * Done is defined as the spider having
  9.  * no more work to complete.
  10.  */
  11. class SpiderDone {
  12.   /**
  13.    * The number of SpiderWorker object
  14.    * threads that are currently working
  15.    * on something.
  16.    */
  17.   private int activeThreads = 0;
  18.   /**
  19.    * This boolean keeps track of if
  20.    * the very first thread(特指第一个线程) has started
  21.    * or not. This prevents this object
  22.    * from falsely reporting that the spider
  23.    * is done, just because the first thread
  24.    * has not yet started.
  25.    */
  26.   private boolean started = false;
  27.   
  28.   /**
  29.    * This method can be called to block(阻止,阻碍)
  30.    * the current thread until the spider
  31.    * is done.
  32.    */
  33.   synchronized public void waitDone()
  34.   {
  35.     try {
  36.       while ( activeThreads>0 ) {
  37.         wait();
  38.       }
  39.     } catch ( InterruptedException e ) {
  40.     }
  41.   }
  42.   /**
  43.    * Called to wait for the first thread to
  44.    * start. Once this method returns the
  45.    * spidering process has begun.
  46.    */
  47.   synchronized public void waitBegin()
  48.   {
  49.     try {
  50.       while ( !started ) {
  51.         wait();
  52.       }
  53.     } catch ( InterruptedException e ) {
  54.     }
  55.   }
  56.   /**
  57.    * Called by a SpiderWorker object
  58.    * to indicate that it has begun
  59.    * working on a workload.
  60.    */
  61.   synchronized public void workerBegin()
  62.   {
  63.     activeThreads++;
  64.     started = true;
  65.     notify();
  66.   }
  67.   /**
  68.    * Called by a SpiderWorker object to
  69.    * indicate that it has completed a
  70.    * workload.
  71.    */
  72.   synchronized public void workerEnd()
  73.   {
  74.     activeThreads--;
  75.     notify();
  76.   }
  77.   /**
  78.    * Called to reset this object to
  79.    * its initial state.
  80.    */
  81.   synchronized public void reset()
  82.   {
  83.     activeThreads = 0;
  84.   }
  85. }

同样,其他的方法不是很常用。用到的话,再回来看吧!

That’s OK!

【C/C++】C++ String类的实现

面试的时候被问及了String类的实现,结果没写好... 就当是重新复习一下吧。 下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数。#include #inclu...
  • moxiaomomo
  • moxiaomomo
  • 2011年05月11日 12:15
  • 38131

C++笔试题之String类的实现

这个在面试或笔试的时候常问到或考到。 已知类String的原型为: class String { public: String(const char *str = NULL);// 普通...
  • caoshangpa
  • caoshangpa
  • 2016年05月29日 09:12
  • 4093

B00015 C++实现的图类

代码来自:GitHub - obscure76/graph: c++ graphs。 graph.h文件内容如下: #include #include #include #include #inclu...
  • tigerisland45
  • tigerisland45
  • 2016年06月21日 08:30
  • 1834

C++中类的声明和类的实现分开

首先我们要实现确定一个点是否在园内的功能 所以我们需要两个类一个Point类,一个Circle类 首先我们要先创建一个项目,名为Test2(这是我的项目名字)这里不做过多的解释,使用vs应该都会创...
  • qq_36983177
  • qq_36983177
  • 2017年02月09日 18:07
  • 1302

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小。 Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数。 #ifndef STACK #define STACK //栈...
  • u013467442
  • u013467442
  • 2015年06月20日 15:48
  • 1301

C++ 类 实现栈

这个是类的实现“`includeusing namespace std; typedef int Item;typedef struct node{ Item data; ...
  • u013766436
  • u013766436
  • 2015年11月27日 10:31
  • 2893

栈类C++实现

头文件: #pragma once //用数组实现栈,数组索引为0的位置为栈底,索引top指向栈顶 template class Stack { public: Stack(int capcit...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2014年09月06日 22:21
  • 1571

C++实现一个自己的string类

class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other); // 拷贝...
  • u011412619
  • u011412619
  • 2015年03月30日 21:26
  • 1894

类链表的简单实现

刚学完类和对象,做了个简单的类指针,有插入和遍历的功能,没有删除。类里有四个数据成员:data(用在判断函数),number(学号),name(姓名),*next(指针)。 两...
  • NO_1997coder
  • NO_1997coder
  • 2015年04月19日 21:10
  • 1525

C++类实现二叉树的构建和遍历

#include #include #include using namespace std; /*二叉树的结构体*/ typedef struct BTree { int val; str...
  • u014453898
  • u014453898
  • 2017年02月06日 17:03
  • 997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpiderDone类的实现
举报原因:
原因补充:

(最多只允许输入30个字)