怎么用数据库的悲观锁来实现一个分布式的锁
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇"怎么用数据库的悲观锁来实现一个分布式的锁"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2025年12月01日怎么用数据库的悲观锁来实现一个分布式的锁
这篇"怎么用数据库的悲观锁来实现一个分布式的锁"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"怎么用数据库的悲观锁来实现一个分布式的锁"文章吧。
分布式锁顾名思义是发生在分布式环境中的。对于单进程场景,我们可以使用语言和类库提供的锁,对于分布式锁,我也可以使用分布式锁。也就是说同样的锁使用的环境不同,分布式环境中用的锁就叫分布式锁!
根据上面的理解,分布式锁是不是应该具备下面的特点:
分布式锁必须保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行;
一个线程获得了锁,其他线程必须等待持有锁的线程释放掉才能再获取;
锁必须要有超时机制(避免死锁)
基于上面的特点,我们就可以通过数据库的悲观锁来实现一个分布式锁。
代码非常的简单,使用 for update 即可。具体如下:
public class XttblogLock {
private DataSource dataSource;
private static final String cmd = "select * from xttblog_lock where id = 1 for update";
public XttblogLock(DataSource ds) {
this.dataSource = ds;
}
public static interface CallBack{
public void doAction();
}
public void lock(CallBack callBack) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
//try get lock
System.out.println(Thread.currentThread().getName() + " begin try lock");
conn = dataSource.getConnection();
conn.setAutoCommit(false);
stmt = conn.prepareStatement(cmd);
rs = stmt.executeQuery();
//do business thing
callBack.doAction();
//release lock
conn.commit();
System.out.println(Thread.currentThread().getName() + " release lock");
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}该锁的调用也非常的简单,具体代码如下:使用数据库悲观锁实现分布式锁主要用了数据库的 for update 命令,执行改命令后,对应行记录会被锁住,其它线程会被阻塞主,直到获取到这行记录的线程提交了事务。这里需要注意要把自动提交设置为 false。
该锁的调用也非常的简单,具体代码如下:
final XttblogLock xttblogLock = new XttblogLock(dataSource);
xttblogLock.lock(new CallBack() {
@Override
public void doAction() {
System.out.println(Thread.currentThread().getName() + "beging do somthing");
try {
System.out.println("业余草:www.xttblog.com 欢迎你!");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "end do somthing");
}
});虽然数据库的 for update 悲观锁可以用来做分布式锁,但实际的生产过程中采用这种方法的非常少,因为它性能不是很高。
以上就是关于"怎么用数据库的悲观锁来实现一个分布式的锁"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
分布式
数据
数据库
悲观
线程
内容
代码
环境
面的
命令
文章
方法
特点
知识
篇文章
不同
顾名思义
中用
也就是
也就是说
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
义乌网络安全培训机构免费试学
青岛理工考试客户端的服务器地址
google 内存数据库
sql数据库表添加记录
什么是计算机网络技术学
一台服务器一天要用多少钱
可信计算护卫网络安全
开展网络安全法主题征文
vfp数据库视频教程
sql数据库编写
网络安全知识作文150
广西贫困数据库
王者荣耀开启的服务器有什么用
网络安全小达人手抄报图片
孝感市网络安全大队
http 代理服务器实现
阿里服务器续费
北京常规软件开发诚信合作
怀远网络安全排名
上海工业软件开发哪家便宜
h3c服务器 安全面板
山东军工时间频率同步服务器
信息网络安全宣传报
服务器自动化安装程序
1兆服务器和5兆虚拟主机
管家婆没有数据库怎么办
为什么要安装数据库
ssh连接服务器d失败
网络安全小达人手抄报图片
湖北项目软件开发服务费