MySQL的锁
MySQL锁 全局锁: flush tables with read lock,执行此条命令,整个数据库处于只读状态 unlock tables, 释放全局锁,会话断开时,也会自动释放全局锁 一般用来全库逻辑备份 表级锁:MySQL 里面表级别的锁有这几种: 表锁:通过lock tables 语句可以对表加表锁,表锁除了会限制别的线程的读写外,也会限制本线程接下来的读写操作。 元数据锁:当我们对数据库表进行操作时,会自动给这个表加上 MDL,对一张表进行 CRUD 操作时,加的是 MDL 读锁;对一张表做结构变更操作的时候,加的是 MDL 写锁;MDL 是为了保证当用户对表执行 CRUD 操作时,防止其他线程对这个表结构做了变更。 意向锁:当执行插入、更新、删除操作,需要先对表加上「意向独占锁」,然后对该记录加独占锁。意向锁的目的是为了快速判断表里是否有记录被加锁。 行级锁:InnoDB 引擎是支持行级锁的,而 MyISAM 引擎并不支持行级锁。 记录锁(Record Lock) 锁住某行记录,分为读写锁,事务提交后自动释放,例如select * from...
Synchronized 与 ReentrantLock 的区别
Synchronized 与 ReentrantLock 的区别 synchronized:隐式锁,JVM 自动加锁 / 释放锁 ReentrantLock:显式锁,需要手动 lock() / unlock() ReentrantLock 本质上是基于 AQS 实现的。 synchronized是非公平锁 然后ReentrantLock 有公平锁有非公平锁 ReentrantLock 支持中断lock.lockInterruptibly();还有超时获取锁 123if (lock.tryLock(1, TimeUnit.SECONDS)) { try { } finally { lock.unlock(); }} synchronized ReentrantLock 锁类型 隐式锁 显式锁 释放方式 自动 手动 公平锁 不支持 支持 可中断 不支持 支持 超时获取 不支持 支持 底层 JVM AQS ReentrantLock的使用场景 一般场景我优先使用...



