我正在开发一个多线程应用程序,其中需要不同的线程来同时更新数据库。因此,我在创建它时向每个线程传递了一个新的语句对象(如果我发送单个对象,则避免锁定)。我的疑问是:
从单个 jdbc 连接中获取的语句对象的数量是否有限制?如果我创建了太多语句对象,数据库连接会失败吗?
如果我在线程结束前正确关闭语句,一次可以产生多少线程(在具有 512Mb RAM 的系统上)?
驱动程序不会在保持数据一致的同时更新数据库,无论我使用多少语句对象来并行更新数据库?我用的是mysql。
最佳答案
- 实际上,您能够创建的语句对象的数量应该足以满足您的需要。再说一次,在您的案例中,“太多”是多少?
- 可创建的线程数取决于很多因素。请注意,您创建的这些线程将是“操作系统级”线程,而不是真正的线程(假设您有一个双核系统,这将使它成为 2 个硬件线程,如果超线程可用则为 4 个) .在这里对您进行分析非常重要,以确定在您的系统减速到爬行之前可以创建多少线程。
- 这取决于数据库使用的锁定机制。你的目标是什么;高完整性还是高性能?阅读this .
IMO,您最好从每个线程的连接池中查找 Connection 对象,而不是尝试传递“语句”对象。
关于java - 在多线程应用程序中使用多个语句对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623659/