【发布时间】:2018-01-13 21:26:31
【问题描述】:
我正在做一个简单的项目,该项目将发送多个 HTTP 请求以检索一些数据,解析来自每个 URL 的响应,并返回包含原始 URL 和有关数据的一些信息的响应(线程使用的原因显然是多个 HTTP 请求)。
如果有适合这种情况的最佳实践,我正在徘徊,这是我想到的选项:
1. 让每个线程发送一个 HTTP 请求。解析数据以获取所需信息并返回信息本身(通过Future<SomeDataType>,或在线程完成后进行简单的DataType getInformation() 调用),然后在原始线程中创建 URL-SomeDataType 对
2. 让每个线程接受一个同步列表/映射的附加参数,线程会将 URL-Information 对添加到其中(列表/映射的相同实例将在所有线程之间共享)。
3. 不太可能的选项 - 让每个线程只提取信息,然后以 1/2 中提到的任何一种方式返回,而不是在主线程中解析所有信息(这会降低性能但需要几乎 0 的同步处理,即不错)
是否有针对类似情况的最佳做法?
谢谢!
【问题讨论】:
-
选项 2 和 3 从同步的角度来看是等效的。没有区别 - 从请求或处理的数据中传输所有数据。第一个选项既复杂又缓慢。
标签: java multithreading concurrency thread-safety threadpool