Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

crawler

个人使用java实现的爬虫小项目

主要目标

JAVA
  • 熟悉JAVA语法, 泛型,类的继承,接口,描述符以及java.util.collection中的常用集合。
  • 实践JAVA的读写流模式来读写文件。
设计
  • 实践生产者-消费者模型。
  • 动手实现SQL解析器,通过面向对象的方式生成SQL语句。
  • 实现数据库管理对象作为一个上下文管理器, 主要功能包括:连接管理,游标管理。
  • 复习常用设计模式。(现已使用工厂模式,建造者模式,适配器模式)

问题:

2018.8.12

关于生产者-消费者模型

如果生产者线程与消费者线程分开,则需要考虑两种线程的通信问题。 但与之相矛盾的是,两种线程无法知道对方线程的状态,比如:当生产者进程将Task放入队列后 在一段时间内处于等待状态,并且消费者进程刚好在这期间处理完Task并通知至生产者进程,那 么此时由于生产者进程无产出则消费者进程检测到Task队列为空,那么就会退出线程,之后导致 即使生产者将Task放入队列中,也不会有消费者处理,直到手动杀死进程。

解决方案
  • 使用线程池解决。同一时间所有线程只做一件事。
  • 可以使用阻塞一定的时间间隔实现。
解决结果

生产者-消费者模型同步问题能得到解决,但是又出现新的问题。

  1. 由于不同处理单元之间通过队列来处理,而这些队列是有大小限制的,这样很可能需要再实现 一个生产者消费者模型来实现当一个队列积满时能保证队列有在处理,不然就会导致死锁——双 方进程都在等待。
  2. 需要着手实现logger模块。发现会抛出新的异常UnknownHostException,目前采用忽略 的方式处理,目前数目是对的上的,但不保证以后不出问题,所以logger模块的实现需要提上 日程。
  3. 另,系统目前的实现还是粗略的实现方式,Sender跟handler的处理可以考虑不采用构造一个 新的对象来实现。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages