多线程插入中的一个数据库连接,使用事务同时更新数据

时间:2016-03-28 05:50:43

标签: java mysql multithreading

我有点困惑,我知道交易隔离。

假设我有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数据库对多个连接的呐喊。

0 个答案:

没有答案