2PL-事务并发遇到的问题(一

问题1:AI给的代码

  • 大概能用可以给个参考方向,但是还是需要自己调整和识别问题的。下面是我问的部分提示语句
  • 1.2pl 的java demo 一个事务可以有多个锁
  • 2.你给的线程启动1.先请求写锁,再请求排他锁 ;排它锁那里获取你用的是while死循环
  • 3.你给的线程启动1.先请求写锁,再请求排他锁 ;排它锁那里获取你用的是while死循环 共享锁数量已经大于0了
  • 4.重新写一个完整的2pl demo
  • 5.能给个可以给多个key一步一步枷锁。测试例子需要 两个线程 至少有一个相同的key 然后顺序执行完毕的例子

问题2:是关于锁的问题

业务写多了,锁没用太多有些问题都搞迷糊了

synchronized的问题

  • 1.如果是没加限定对象则这个锁是对当前对象生效的,也就是说两个线程访问两分方法也是互斥的。
  • 2.如果加个static那个锁的对象是class
  • 3.synchronized可以有限定对象的syn(){}
  • 4.当时代码的例子给的是wait()/notify()组合的

lock的问题

  • 同一个线程的writeLock().lock()是可重入的,我用一个线程在那里测锁阻塞的问题还在纠结怎么程序跑完了,明明是要卡在那里的。
  • 还有个问题是之前我认为读锁是共享的什么时候都是可以拿到的,后来发现当有写锁操作的时候读锁也是阻塞的

单例模式不加锁会有坑的

  • 自信慢慢的用懒加载模式写了个单例模式,测试了下惊讶的发现怎么代码两次获取的增量ID居然是一个数据。单例的懒加载模式得枷锁

饿汉式

csharp 复制代码
public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

双重检查锁定

csharp 复制代码
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) { // 第一次检查
            synchronized (Singleton.class) {
                if (instance == null) { // 第二次检查
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

最后

demo还没搞好,后面搞了个简单的能跑的hello world在来分享下(大概搞下多个线程能正常打印数据,有相同资源会出现死锁的情况)。还有个部分是实际的流程我不太清楚按照平时的理解就是顺序一个一个表进行更新(没有外键级联那种)。

swift 复制代码
//大概会事下面这个样子
 // 管理每个 key 对应的读写锁 锁冲突是全局的
    private static final ConcurrentHashMap<String, ReadWriteLock> lockMap = new ConcurrentHashMap<>();
    // 每个事务对应 key锁 可以提前检擦可能的锁冲突 long是个全局的事务ID
    private static final ConcurrentHashMap<Long, List<ResourcLock>> transactionLocks = new ConcurrentHashMap<Long, List<ResourcLock>>();
相关推荐
kybs199114 小时前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
汉堡大王952714 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
孙启超14 小时前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
梦想很大很大14 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
2601_9622186114 小时前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客15 小时前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
Achou.Wang15 小时前
k8s中nginx worker process自动设置
后端·golang
张洛闻Eren15 小时前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
沙蒿同学15 小时前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
Terra.K15 小时前
后端+AIAGENT项目开发指南
后端·agent·个人开发