ここで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に話しました、そして彼らはそのデータベースを所有している人々と話し合っています。
しかし、私の質問は、なぜそれがハングするのかということです。いかなる理由で?