我有一个在多台计算机上运行的 java 应用程序,它们都连接到同一个 MySQL 数据库。我需要事务以确保正确更新数据库。
我在释放锁时遇到问题。这是代码:
public boolean bookSeats(int numeroSala, Calendar dataOra, List<Posto> posti) {
    JDBConnection connection = JDBConnection.getDbConnection();
    Connection conn = connection.conn;
    java.sql.Date javaSqlDate = new java.sql.Date(dataOra.getTime().getTime());
    java.sql.Time javaSqlTime = new java.sql.Time(dataOra.getTime().getTime());
    try {
        conn.setAutoCommit(false);
        conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try
    {
        Posto p = null;
        ListIterator<Posto> itr = posti.listIterator();
        PreparedStatement stmt = null;
        stmt = conn.prepareStatement(
            "INSERT INTO sala?_tickets " + 
            "(giornoSpettacolo, orarioSpettacolo, fila, posto) " + 
            "VALUES (?, ?, ?, ?)");
        stmt.setInt(1, numeroSala);
        while(itr.hasNext())
        {
            p = itr.next();
            stmt.setString(2, javaSqlDate.toString()); // giornoSpettacolo
            stmt.setString(3, javaSqlTime.toString()); // orarioSpettacolo
            stmt.setInt(4, p.getFila()); // fila
            stmt.setInt(5, p.getNumero()); // posto
            stmt.addBatch();
        }
        stmt.executeBatch();
        conn.commit();
        return true;
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    return false;
}
此方法工作正常,但是当我尝试同时在另一台计算机上执行此方法时,即使conn.commit()已完成,我也会收到 DEADLOCK 错误。  
一旦我关闭第一个应用程序,另一个应用程序就可以运行该方法而不会出现死锁错误。好像 COMMIT 没有释放锁?