在java中使用循环结构并行处理

问题描述:

我正在创建一个爬虫程序 - 一个java web应用程序,用户可以在其中定义爬网作业,从中提取和存储特定网站的信息。在java中使用循环结构并行处理

作为这项工作的一部分,有一个'循环'结构......它有一个列表部分,它最初被评估(通常代表一个值列表)......之后是循环体,它对列表中的每个项目执行一次(从前面提到的列表部分)。

请注意,在另一个循环结构中可以有一个循环结构,依此类推。

问题是,有时候一个列表可能包含数百万行数据 - 并且要为此列表中的每一行执行正文。主体有一个起始索引值,索引的上限,并增加1。

我想要做的是,对于单级循环,最初计算列表值并将其存储在数据库中。之后,不是一次执行正文,而是将其分割为不同的部分,以便并行处理列表的不同部分。

但是,如何分解n级循环的作业? (一个循环等在IE中一个循环。)

有没有做这样的处理...任何教程的一些推荐的方式或指导,你可以指出我的,将是对我很大的帮助。

假设你创建3个线程:T1,T2,T3。和以下为循环结构,用于eaxmple

for(int i=0; i<100; i++) 
{ 
    for(int j=0; j<100; j++) 
    { 
     for(int k=0; k<100; k++) 
     { 
      // do some processing. 
     } 
    } 
} 

修改增量一部分i += no. of threads。在这种情况下,它将是i += 3

因此,i,j,k的初始值将随着每个线程而变化。

对于T1:i = 0;

对于T2:i = 1;

对于T3:i = 2;

与之相似的循环限制可以被设置。

我建议包装为列表的1种元素的处理逻辑到可运行或调用,和然后将它们传递到一个Executor用于执行。这将在不同的工作线程中并行运行任务。当然,这取决于你的机器有多少核心,这将是多么“平行”。 如果列表中的每个元素可以被处理完全独立的所有其他的,比这将是要走的路,而不是我自己乱搞与线程和将列表到子列表等

根据你的描述对我来说, ,我知道你正在获取xyz网站的源代码并从中提取数据。

您可以使用XPath和RegularExpression来完成这种任务。使用JSOUP,它可以帮助你很多。

就并行化而言,您可以使用.select,getElementbyId,getElementByClassJSOUP(这是一个开源)。不是简单地把

for(i=0 ;i< length;i++) 
{ 

    i am fetching i; 
    i am fetching i+1; 
    int temp=i+1; 
    if(temp>=length) 
    { 
     break; 
    } 
} 

希望这有助于:http://jsoup.org

这听起来像是为Java 7 fork/join framework

一个伟大的候选人