GuozhongCrawler系列教程 (5) TransactionRequest详解

Wesley13
• 阅读 561

      为了实现和维护并发抓取的属性信息提供线程安全的事务请求。TransactionRequest是一个抽象类自己不能设置Processor,却需要实现 TransactionCallBack接口。TransactionRequest是个复合的BasicRequest。他可以将多个PageRequest、BinaryRequest甚至TransactionRequest 自己的对象添加到child集合中,在下载过程中首先下载TransactionRequest中的所有childRequest,每个childRequest下载完成后使用notify方式逐步向上通知, 直到所有的child下载完成TransactionRequest回调 TransactionCallBack的callBack方法通知业务层这个TransactionRequest下载完成。

方法详细资料

  • getPipeline

    public Pipeline getPipeline()
    
  • setPipeline

    public void setPipeline(Pipeline pipeline)
    
  • addAttribute

    public BasicRequest addAttribute(java.lang.String attribute,
                            java.lang.Object value)
    

    从类复制的说明: BasicRequest

    设置属性

  • 指定者:

  • addAttribute 在类中 BasicRequest

  • 返回:

  • 返回BasicRequest对象自身

  • getAttribute

    public java.lang.Object getAttribute(java.lang.String attribute)
    

    从类复制的说明: BasicRequest

    取得属性

  • 指定者:

  • getAttribute 在类中 BasicRequest

  • 返回:

  • 返回attribute属性对应的value。没有则返回null

  • addChildRequest

    public void addChildRequest(BasicRequest request)
    

    添加一个BasicRequest到TransactionRequest的child中

  • 参数:

  • request -

  • iteratorChildRequests

    public java.util.Iterator<BasicRequest> iteratorChildRequests()
    

    返回这个TransactionRequest所有child的迭代器

  • 返回:

  • notify

    public void notify(int hashcode)
    

    从类复制的说明: BasicRequest

    当子url或者当前url完成的时候回调

  • 覆盖:

  • notify 在类中 BasicRequest

  • 参数:

  • hashcode - 实际Request的hashCode

  • checkComplete

    public void checkComplete()
    

    检查是否所有的Request标记都不是false。如果是那么所有的Request已经请求完成和处理。

点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java 学习心得体会(二)
66. EJB容器提供的服务       主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。67. EJB规范规定EJB中禁止的操作有哪些?       1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),2.不能操作awt,3.不能实现服务器功能,4.不
浩浩 浩浩
3年前
【Flutter实战】图片和Icon
3.5图片及ICON3.5.1图片Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。ImageProviderImageProvider是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvi
Wesley13 Wesley13
3年前
java并发面试常识之ArrayBlockingQueue
       ArrayBlockingQueue是常用的线程集合,在线程池中也常常被当做任务队列来使用。使用频率特别高。他是维护的是一个循环队列(基于数组实现),循环结构在数据结构中比较常见,但是在源码实现中还是比较少见的。线程安全的实现     线程安全队列,基本是离不开锁的。ArrayBlockingQueue使用的是Reen
九鹤 九鹤
3年前
并发编程的基础概念
什么是线程?什么是进程?java可以开启线程吗?不能因为Java无法直接操硬件,他是运行在虚拟机上面的,什么是并发?什么是并行?并发就是多个线程去操作一个资源。并行是多个线程同时行,但是操作的资源不是同一个。线程的六个状态new(诞生)runnable(运行)Blocked(阻塞)waiiiing(等待)Tiemwaiing(超时等待)
Stella981 Stella981
3年前
Redis的锁
分布式与集群什么是锁在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须
Wesley13 Wesley13
3年前
Java ThreadLocal的内存泄漏问题
ThreadLocal提供了线程独有的局部变量,可以在整个线程存活的过程中随时取用,极大地方便了一些逻辑的实现。常见的ThreadLocal用法有:\存储单个线程上下文信息。比如存储id等;\使变量线程安全。变量既然成为了每个线程内部的局部变量,自然就不会存在并发问题了;\减少参数传递。比如做一个trace工具,能够输出工程从开始到结
Wesley13 Wesley13
3年前
Java分布式锁看这篇就够了
\什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到
小白学大数据 小白学大数据
3个月前
如何使用pholcus库进行多线程网页标题抓取以提高效率?
在当今信息爆炸的时代,数据抓取已成为获取信息的重要手段。Go语言因其高效的并发处理能力而成为编写爬虫的首选语言之一。pholcus库,作为一个强大的Go语言爬虫框架,提供了多线程抓取的能力,可以显著提高数据抓取的效率。本文将介绍如何使用pholcus库进行
融云IM即时通讯 融云IM即时通讯
2星期前
融云IM干货丨在IM服务中,有没有现成的工具或库可以帮助我们实现IM服务API接口的优化?
根据您的需求,以下是一些现成的工具和库,它们可以帮助您实现IM服务API接口的优化,以减少重复数据请求:SpringBoot实现接口幂等性:可以使用SpringBoot框架来实现接口的幂等性,确保接口在高并发情况下不会因为重复请求而产生错误结果。这通常涉及