我正在使用多线程ExecutorService接口来并行执行任务。但是这里有一个共享资源,我需要在同步块中进行,这样一次只有一个线程可以访问它。当我在同步块中进行时,这项工作大约需要3个小时才能完成。由于synchronized块,我在这里看不到使用多线程的任何意义。可以任何人建议是否有任何替代方案或实施以下示例的最佳方式以更快的方式运行循环请:
ExecutorService executor = Executors.newFixedThreadPool(100);
for(String str : arrayList){
for(String str1 : arrayList1){
for(String str2 : arrayList2){
executor.execute(new Runnable() {
@Override
public void run() {
//do Something
synchornize block{}
}
});
}
}
}
有什么建议吗?
答案 0 :(得分:0)
您应该尝试重新设计代码,以完全避免或最小化同步块。例如,您可以将API调用的结果放在同步队列上,并让另一个线程处理它们。