24 Matching Annotations
  1. Dec 2022
    1. 一个多线程程序的渐次瓦房店过程通常是这样的:开始,熟悉各种锁和内存栅的老手搭了易于维护的高性能架子出来,然后非熟练技工往上增加功能后无法解决神秘的死锁,只得把细粒度锁换成了对象锁,而最后接手的转码小工索性把对象锁全拆了改全局锁,然后破口大骂线程库:啥破玩意为什么只有一颗CPU在工作
  2. Aug 2022
    1. 在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议

      select ... for update是在读的时候加悲观锁

    1. 事务B是当前读,必须要读最新版本,而且必须加锁,因此就被锁住了,必须等到事务C’释放这个锁,才能继续它的当前读。
    1. tem.lock.tryLock(10, TimeUnit.SECONDS)

      这里避免了长时间死锁

    2. 查看抓取出的线程栈,在页面中部可以看到如下日志:

    3. 只能确保多个线程无法执行同一个实例的 wrong 方法,却不能保证不会执行不同实例的 wrong 方法