Java线程池为什么执行效率没有显示创建线程高呢
问题描述
同步二十万条数据,我想使用多线程同时进行, 但为什么我使用线程池同步数据的效率比我显示创建线程更慢呢?
这是显示创建线程:
for (int i = 0; i < studentIdList.size(); i++) {
List<String> studentIds = studentIdList.get(i);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (String per : studentIds) {
//数据库操作
}
}
}, "线程" + i);
thread.start();
}
//这是使用线程池创建
ExecutorService exec= Executors.newCachedThreadPool();
for (int i = 0; i < studentIdList.size(); i++) {
List<String> studentIds = studentIdList.get(i);
exec.execute(new Runnable() {
@Override
public void run() {
for (String per : studentIds) {
//数据库操作
}
}
});
exec.shutdown();
}
不应该是使用了线程池 效率更高更快吗,为什么反而显示创建线程保存到数据库更快呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
很显然,线程池的代码有几个问题:
查看 shutdown 源码,可以看到 shutdown 后,线程池不再接受新任务。
也就是第一次 for 循环,线程池增加了一个任务。然后调用 shutdown 后,线程池就不再接受新的任务了。
意思是说:线程池的代码其实只有一个线程在处理任务,而上面的 new Thread 代码却有多个线程在处理。
当然是上面的代码处理的快。
首先你得保证你的测试代码是正确的。。。