Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程web scraper,每秒连续提取数据,同时允许使用者检索数据_Java_Multithreading_Web Scraping - Fatal编程技术网

Java多线程web scraper,每秒连续提取数据,同时允许使用者检索数据

Java多线程web scraper,每秒连续提取数据,同时允许使用者检索数据,java,multithreading,web-scraping,Java,Multithreading,Web Scraping,我正在使用Java开发一个基于多线程的Web应用程序 我在应用程序中有两个线程,一个web刮板和一个线程来执行一些类似于生产者和消费者的计算。刮板持续读取第三方APIworld人口的数据,该数据每秒更新一次。另一个线程使用者不断尝试从scraper检索数据,并计算每分钟最快的变化率 我的问题是,scraper需要每秒连续提取数据。当使用者检索数据时,它需要锁定刮板的变量,例如记录数据的缓冲区。但是,这可能会阻止刮板每秒连续记录数据。是否有一种方法允许使用者检索数据,而不阻止刮片器在每一秒连续提取

我正在使用Java开发一个基于多线程的Web应用程序

我在应用程序中有两个线程,一个web刮板和一个线程来执行一些类似于生产者和消费者的计算。刮板持续读取第三方APIworld人口的数据,该数据每秒更新一次。另一个线程使用者不断尝试从scraper检索数据,并计算每分钟最快的变化率


我的问题是,scraper需要每秒连续提取数据。当使用者检索数据时,它需要锁定刮板的变量,例如记录数据的缓冲区。但是,这可能会阻止刮板每秒连续记录数据。是否有一种方法允许使用者检索数据,而不阻止刮片器在每一秒连续提取数据?

查看BlockingQueue Java文档。实现是线程安全的,因此生产者和消费者线程可以通过队列安全地相互通信。
如果您担心在将刮刀结果交给消费者时遗漏一个节拍,那么请每秒启动一个新的刮刀线程。然后,如果一个刮刀线程在移交结果时必须等待,则不会影响其他线程的刮刀。如果刮取结果结构带有时间戳,则可以在使用者级别处理可能出现的无序消息。或者在队列级别上使用PriorityQueue。但PriorityQueue不是线程安全的

听起来您可能需要一个。将刮取的数据复制到新的数据结构并返回给用户。这样,用户可以在请求时访问数据,而scraper仍然可以检索新数据。您想每秒更新一次世界人口,并在人口增长最快的时候找到第二个吗?在我看来,这是一个相当鲁莽的计划。你认为每次有人在蒙古某个村庄出生时,中央当局都会在0.1秒内得到通知吗?无论您使用的是什么数据源,都将本质上是对人口的线性估计。观测到的增长率的唯一变化将由舍入误差和网络中的不同延迟引起,而不是由人口增长的实际变化引起。