我有点困惑,我知道交易隔离。
假设我有3个线程同时使用一个数据库连接,并且他们使用事务来插入和更新这样的数据。
new Thread(new Runnable() {
Connection connection1 = null;
@Override
public void run() {
try {
connection1 = MysqlConnectionManager.getConnection();
connection1.setAutoCommit(false);
//execute some insert or update queries
connection1.commit();
} catch (Exception e) {
e.printStackTrace();
}finally {
if(connection1 != null)
try {
connection1.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}).start();
假设其中一个线程有查询错误。这意味着connection1.commit();
将不会执行并调用connection1.setAutoCommit(true);
而其他线程尚未调用commit。即使出现错误或connection1.setAutoCommit(true);
不会影响其他线程中的连接,其他线程会自动提交执行的查询吗?别忘了我只使用一个连接。
如果能够在没有任何问题的情况下使用这些线程,我该怎么做?
我考虑过在每个线程中创建一个新连接但是,我很害怕Mysql数据库对多个连接的呐喊。