迭代超过5000个对象实例的ArrayList

时间:2014-07-08 12:10:36

标签: java multithreading arraylist

我正在使用JDK5,操作系统为Windows7,ram大小为6GB,双核处理器

我有一个数组列表,其中包含5000条记录,其大小最终会增加。

因为这个ArrayList可以包含大量的数据,所以如果我将列表分成两部分并且在FututreTask的帮助下,java并发包,产生两个线程T1和T2,那么这将是一个很好的方法,所以线程(T1和T2)可以并行迭代这个ArrayList并更快地完成它。

请提供一个建议,因为我无法就实现FutureTask迭代Arraylist来得出结论。

3 个答案:

答案 0 :(得分:1)

我写这个答案假设您使用单个CPU来执行程序。只需使用一个for循环。当您可以将CPU任务与I / O任务交错或交错多个I / O任务时,请使用线程。在这些情况下,线程的优点是当一个空闲时(例如同步I / O调用,如文件读取),另一个(比如你的CPU任务)可以接管。

如果在您的情况下使用线程,则CPU必须在线程切换中花费额外的时间。

答案 1 :(得分:0)

正如您在评论中所读到的那样,您是否正在使用像Hibernate这样的持久性API来从数据库中获取列表?如果不是,那么迭代ResultSet并将其存储在列表中显然是一个开销,因为您需要稍后迭代它。

提出实际问题,您可以将列表拆分为两个并使用线程,但根据您正在执行的操作,会有一些缺点。如果您在迭代过程中对列表执行某些操作(如将其写入文件),则列表的顺序将丢失。

答案 2 :(得分:-2)

我认为您可以使用更多线程,以便您可以更快地完成任务。