【发布时间】:2018-05-03 03:35:29
【问题描述】:
我有以下代码
public void addNames(){
List<String> names = new ArrayList<String>
names.parallelStream().foreach(name->add(name));
}
private void add(String name){
SQLSession session = SQLSessionFactory.getSession(config);
Connection con=Session.openConnection();
con.insert(name);
con.commit;
con.close
}
这里的问题是“name->add(name)” 将为每个名称执行,我正在为每个名称打开和关闭连接。如果我有数百万条记录,那么这是一个问题。
我无法在“names.parallelStream().foreach(name->add(name, connection));” 之外打开连接并将其作为参数传递,因为所有线程都会在一个连接对象上阻塞。
所以,我想获取每个线程的连接,我该如何使用
“names.parallelStream().foreach(name->add(name));”?
我希望每个线程都关注
- 获取连接
- 插入
- 插入
- 插入——N个插入
- 提交并关闭连接
如果我正在创建和启动一个线程,我可以这样做,我们如何使用 parallelStreams 为每个线程实现这一点?
简而言之,我希望parallelStream中的线程获取每个线程的连接并执行name->add(name),一旦完成,线程应该提交并关闭连接。这可能吗?
【问题讨论】:
-
我认为您无法使用 parrelStreams 来实现它。我更喜欢通过批量插入来存储记录,或者如果您想采用上述方法,请考虑使用连接池。
标签: java multithreading parallel-processing java-stream java-threads