我想在很大程度上提高ThreadPoolExecutor的性能


BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100, true);
RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy();
ExecutorService executor = new ThreadPoolExecutor(4, 10, 0L, TimeUnit.MILLISECONDS, queue,handler);
executor.execute(new Runnable() {
@Override
public void run() {
for(looping arraylist){
operations related to calling proc...
}
}
});
executor.shutdown();
while (executor.isTerminated() == false){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

以上代码的性能太慢了,需要7分钟才能完成整个代码操作并获取数据

我正在尝试从2个存储过程中获得大数据。为了提高速度,我使用多线程。

谁能提供一个方案来最大程度地提高性能?

你的问题缺乏细节。但是我要试着猜一下。

'ThreadPoolExecutor'管理线程池。当你提交任务时,它会使用空闲线程来运行任务。

因此,如果您立即提交20个任务,只有4个将被并发处理(在您的示例中max threads = 4*)。当一个任务即将完成时,下一个任务将被处理。

现在看看你的代码——只有一个executor.execute(new Runnable()。因此,只提交一个任务。

可能你需要类似下面的代码:


for(looping arraylist){
executor.execute(new Runnable() {
@Override
public void run() {
operations related to calling proc...
}
});
}

*4个线程直到队列未满(代码中有100个等待任务)。提交104个线程后,将使用新的线程(在您的代码中最多使用10个线程)。谢谢"沙拉",看看他的评论。

相关内容

  • 没有找到相关文章

最新更新