我想要并行处理大量的独立行。在下面的代码中,我创建了一个 NUM_THREAD包含 POOL_SIZE行的Theads。 每个线程都启动,然后使用'join'等待每个线程。Java +主题:并行处理行
我想这是一个不好的做法,因为这里完成的线程将不得不等待他的兄弟姐妹在池中。
什么是实现此代码的正确方法?我应该使用哪些类?
谢谢!
class FasterBin extends Thread
{
private List<String> dataRows=new ArrayList<String>();
private Object result=null;
@Override
public void run()
{
for(String s:dataRows)
{
//Process item here (....)
}
}
}
(...)
List<FasterBin> threads=new Vector<FasterBin>();
String line;
Iterator<String> iter=(...);
for(;;)
{
while(threads.size()< NUM_THREAD)
{
FasterBin bin=new FasterBin();
while(
bin.dataRows.size() < POOL_SIZE &&
iter.hasNext()
)
{
nRow++;
bin.dataRows.add(iter.next());
}
if(bin.dataRows.isEmpty()) break;
threads.add(bin);
}
if(threads.isEmpty()) break;
for(FasterBin t:threads)
{
t.start();
}
for(FasterBin t:threads)
{
t.join();
}
for(FasterBin t:threads)
{
save(t.result);// ## do something with the result (save into a db etc...)
}
threads.clear();
}
finally
{
while(!threads.isEmpty())
{
FasterBin b=threads.remove(threads.size()-1);
try {
b.interrupt();
}
catch (Exception e)
{
}
}
}
谢谢,这很有帮助 – Pierre 2011-04-20 14:15:26