java 多线程事务实例
时间: 2023-08-05 08:48:35 浏览: 118
下面是一个简单的Java多线程事务的示例:
```
public class TransactionThread extends Thread {
private Connection conn;
private String sql;
public TransactionThread(Connection conn, String sql) {
this.conn = conn;
this.sql = sql;
}
public void run() {
try {
// 关闭自动提交,开启事务
conn.setAutoCommit(false);
// 执行SQL语句
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
// 提交事务
conn.commit();
// 关闭连接
stmt.close();
conn.close();
} catch (SQLException e) {
try {
// 出现异常,回滚事务
conn.rollback();
// 关闭连接
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
public static void main(String[] args) {
// 获取数据库连接池
DataSource dataSource = getDataSource();
// 创建多个线程进行事务操作
TransactionThread thread1 = new TransactionThread(dataSource.getConnection(), "INSERT INTO table1 (col1, col2) VALUES ('value1', 'value2')");
TransactionThread thread2 = new TransactionThread(dataSource.getConnection(), "UPDATE table2 SET col1='value1' WHERE col2='value2'");
thread1.start();
thread2.start();
}
}
```
该示例中,我们创建了一个TransactionThread类,用来执行一个SQL语句,并在多线程环境下进行事务管理。在run方法中,我们首先关闭自动提交,开启事务;然后执行SQL语句;如果执行过程中出现异常,我们回滚事务;否则提交事务。在main方法中,我们创建了两个TransactionThread对象,分别执行不同的SQL语句,以模拟多线程环境下的事务操作。需要注意的是,在实际应用中,我们应该使用专业的事务管理框架,如Spring的声明式事务管理,来进行事务操作。
阅读全文