【发布时间】:2017-01-30 01:12:19
【问题描述】:
我仅限于 AWS 上的 1 核机器,但在测量完成我的所有 http 请求并检查其结果的时间后,其中两个加起来需要与其余 50 个请求一样多的时间来获取数据(大约 2 分钟)。
我不想让我的代码过于臃肿,但我知道并行性和异步性会严重缩短此任务的执行时间。我想在它们自己的线程上启动两个大请求,这样它们就可以在其他线程运行时发出,但我目前将这些 http 请求的结果存储在一个列表中。
只要预先初始化数据,您能否同时访问列表的不同(保证)元素?我见过并发列表和并行列表,但一个不是并行的,另一个在每次修改时重新分配整个列表,所以这两者都不是一个特别明智的选择。
在这种情况下我该怎么办?
【问题讨论】:
-
您可以创建自己的线程,然后将您的请求列表分派到不同的线程吗?
-
我试过了,得到了一个非常有趣的结果。我有 3 个数据集。如果我设置一个 Thread[] team = new Thread[dataSets.length];然后让它们全部旋转,整体吞吐量要高得多,但即使在做了 for(int I=0; I
-
将列表条目设置为结果数组的索引在线程内也仍然正确,但始终失败。在线程死亡的过程中是否发生了某种延迟以将结果提交回来?
-
我发现 Thread.isAlive() 方法没用。它只是告诉您它当前是否处于活动状态,而不是它是否已退役。如果我遍历线程团队并只使用 thread.join(),突然间所有数据都会正确更新。为什么是这样?方法的名称与它完成的任务无关。
标签: java multithreading parallel-processing network-programming