ここで1つの基本的な質問があります-私はという名前の新しいデータベースで作業していXpressMPます。
データベースに大量のレコードを挿入するマルチスレッドプログラムを作成しました。データベースに接続しているときに最も重要なことに気づきました。
私のプログラムでは、以下のようなものを使用している場合-
class Task implements Runnable {
   private Connection dbConnection = null;
   private PreparedStatement preparedStatement = null;
   //other stuff
 @Override
  public void run() {
   try {
      dbConnection = getDBConnection();
   } finally {
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
                preparedStatement = null;
            } catch (SQLException e) {
            }
        }
        if (dbConnection != null) {
            try {
                dbConnection.close();
                dbConnection = null;
            } catch (SQLException e) {
            }
        }
    }
  }
}
それは正常に動作し、最後のブロックですべての接続を閉じています。そして、データベースにさらに多くの行を挿入できます。
しかし、複数のスレッドで意図的に静的接続を使用し始めるとすぐに(これは実行すべきではありません)-
class Task implements Runnable {
   private static Connection dbConnection = null;
   private static PreparedStatement preparedStatement = null;
   //other stuff
 @Override
  public void run() {
  try {
    dbConnection = getDBConnection();
   } finally {
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
                preparedStatement = null;
            } catch (SQLException e) {
            }
        }
        if (dbConnection != null) {
            try {
                dbConnection.close();
                dbConnection = null;
            } catch (SQLException e) {
            }
        }
    }
  }
}
データベース全体がハングします。データベースを再起動するまで、そのデータベースを操作できません。つまり、私が持っているJDBCドライバーに問題があるということです。私はこの問題についてDBAに話しました、そして彼らはそのデータベースを所有している人々と話し合っています。
しかし、私の質問は、なぜそれがハングするのかということです。いかなる理由で?