【发布时间】:2020-07-10 09:21:46
【问题描述】:
所以基本上我是一家大公司的实习生。我必须做一个小的java程序(javaFX),它需要一个csv列表并更新我们的数据库(3个服务器6个数据库)。该文件有超过 700.000 个条目,我们的服务器可以支持 50 个连接。所以我对连接池的限制是 50,我应该使用不超过 200 个线程。那是我从首席程序员那里得到的信息。
我开始了我的项目,制作了我的对象并从 csv 文件中制作了一个可观察的列表(可以说它只有 Id 和 price,其他字段无论如何都无关紧要)。我所在的堆栈是线程池和连接池。我如何与两者一起工作?在我的新手头脑中,我在想我将创建一个循环,使 200 个线程执行语句,但是我必须使用 50 个连接,所以我应该创建 50 个线程,从池中打开 50 个连接并执行更新?如果有人有一个例子让我了解 mysql 连接的线程是如何工作的,我会非常高兴,因为我的脑袋要爆炸了。
【问题讨论】:
-
每个线程应该使用一个连接。因此,如果连接数的限制是 50,这意味着您不能使用超过 50 个线程......与数据库通信。请注意,尝试在多个线程之间共享 JDBC Connection 对象是不安全的。 JDBC 对象(
Connection、Statement、ResultSet等)(通常)不是线程安全的。 -
还不清楚尝试运行大量并行线程是否是个好主意。更好的选择可能是将多个更新组合到单个 UPDATE 语句中或使用批处理。 (我有点惊讶首席程序员建议你“全力以赴”并行化......)
-
“获取一个 csv 列表”是在内存中还是在磁盘上?
-
您是否使用单个输入文件来更新三个不同的数据库?
-
是的,它是一个文件来更新 3 个不同服务器中的 6 个数据库。
标签: java multithreading javafx threadpool connection-pooling