JSpider学习五 —— WorkerThreadPool

    之前提到SpiderImpl的两个重要成员spiders和thinkers,他们都是WorkerThreadPool类的实例,下面分析这个类的代码。

    该类继承了java.lang.ThreadGroup类,有三个成员:

    /** Task Dispatcher thread associated with this threadpool. */
    protected DispatcherThread dispatcherThread; // 为这个线程池分派任务的线程;

    /** Array of threads in the pool. */
    protected WorkerThread[] pool; // 工作线程池


    /** Size of the pool. */
    protected int poolSize; // 线程池大小

   构造函数传入了线程池名称、线程名称和线程池大小三个参数,其中线程池名称用来构造父类ThreadGroup,线程名称用于构造任务派发线程DispatcherThread实例,根据线程池大小初始化了pool成员,生成了多个WorkerThread线程,接着用了下面一段代码:

        synchronized (this) {
            try {
                pool[i].start();
// 启动该工作线程
                wait();
// 本线程进入等待状态,是在等待工作线程完成工作准备?稍后再确定。
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }

    public synchronized void assign(WorkerTask task)方法为线程池分派一个任务,遍历工作线程池,发现空闲即通过WorkThread的assign方法分派该task,如果没有空闲线程,则进入等待状态,被唤醒后再次遍历。看样子WorkThread线程在完成工作和准备完毕时都会唤醒WorkerThreadPool。

    public void assignGroupTask(DispatcherTask task)方法指定一个分派器任务,由dispatcherThread成员的assign方法接收。

    其他方法即计算线程池的使用情况,都是遍历线程池然后累加得到一个结果。

    下一步分析WorkerThread和DispatcherThread的代码,看看怎么完成指定任务的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值