欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java鎖和事務的區別

何小燕1年前6瀏覽0評論

在Java編程中,鎖和事務是兩個常見的概念。它們的作用不同,但都可以用來處理多線程并發的問題。

鎖是一種同步機制,可以讓每次只有一個線程訪問共享資源。常見的鎖包括synchronized關鍵字、ReentrantLock和ReadWriteLock等。這些鎖都可以保證在同一時間內只有一個線程可以執行關鍵代碼段,從而避免了并發問題。

public class LockDemo {
private static int counter = 0;
private static final Object lock = new Object();
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(() -> {
synchronized (lock) {
for (int j = 0; j < 1000; j++) {
counter++;
}
}
}).start();
}
}
}

事務則是一種原子操作,可以將幾個操作看成一個整體進行處理。當事務操作完成后,要么所有操作都成功,要么所有操作都失敗,從而保證了數據的完整性和一致性。

public class TransactionDemo {
public static void main(String[] args) throws SQLException {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
conn.setAutoCommit(false);
try {
PreparedStatement stmt1 = conn.prepareStatement("UPDATE users SET balance = balance - 100 WHERE id = ?");
stmt1.setInt(1, 1);
stmt1.executeUpdate();
PreparedStatement stmt2 = conn.prepareStatement("UPDATE users SET balance = balance + 100 WHERE id = ?");
stmt2.setInt(1, 2);
stmt2.executeUpdate();
conn.commit();
} catch (SQLException e) {
conn.rollback();
} finally {
conn.close();
}
}
}

總體來說,鎖和事務都可以用來處理多線程并發的問題,但是它們的作用和用法各有不同。鎖用來控制并發訪問,事務用來保證數據操作的原子性、一致性和持久性。