JAVA- 锁机制介绍 进程锁-数据库锁

时间:2025-04-02 10:50:53

多台服务器但是一般是用一个数据库的数据源,通过数据库的行锁或事务实现进程间的互斥。
示例代码(MySQL行锁)

public class DatabaseLockExample {
    private static final String DB_URL = "jdbc:mysql://localhost:3306/mydb";
    private static final String USER = "root";
    private static final String PASS = "password";

    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS)) {
            // 开启事务并锁定某一行
            conn.setAutoCommit(false);
            PreparedStatement stmt = conn.prepareStatement(
                "SELECT * FROM locks WHERE lock_name = 'my_lock' FOR UPDATE"
            );
            ResultSet rs = stmt.executeQuery();
            
            if (rs.next()) {
                System.out.println("进程获取到数据库锁,开始执行临界区操作...");
                Thread.sleep(5000); // 模拟耗时操作
            }
            
            conn.commit(); // 提交事务后释放锁
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

优点:适用于分布式环境。
缺点:依赖数据库,需处理连接池和事务超时。