使用相同的语句对象在多个线程中执行多个查询?

时间:2014-08-07 07:54:09

标签: java sql database multithreading jdbc

重新使用java.sql.Statement对象同时在多个线程中执行多个查询 是一个好主意吗?

我已经在某处读过,建议重复使用相同的语句对象,但这是顺序执行。

Statement statement = con.createStatement();

现在,如果我使用此单个语句实例为同时多个线程中的多个查询运行executeUpdate()

请注意,它不是PreparedStatement,我没有得到任何ResultSet。

我认为答案取决于两种情况:

  1. 如果查询是互斥的,那么它应该没问题。
  2. 如果查询正在处理同一组数据,则可能存在问题。
  3. 我的理解是否正确?

    感谢。

1 个答案:

答案 0 :(得分:2)

不,这绝对不是个好主意。例如,ResultSetsStatement相关联。当另一个线程突然发出新查询时,你不希望在ResultSet内进行迭代(ResultSet将被关闭,至少如果驱动程序是一个表现良好的那个)。

也没有迹象表明Statements是线程安全的。如果没有明确指出,则它不是线程安全的(至少在大多数情况下)。