MySQL的乐观锁和悲观锁

1、乐观锁:

乐观锁在操作数据的时候,是保持一种乐观的状态,认为别的线程是不会同时修改数据的,所以是不会上锁的,但是在更新的时候,会判断一下在这个期间内是否有别的线程修改过数据。

主要的流程:

1、假设两个线程,线程A和线程B直接获取同步数据资源,不会加锁,执行各自的操作。

2、线程A和线程B在更行同步资源的时候,都会去判断一下资源是否被其他的线程修改过。

3、如果同步资源没有被其他的资源修改后,会直接更新内存中同步资源的值

4、如果同步资源被其他的线程修改过,那么根据需要执行不同的操作,直接报错或者是重试。

2、悲观锁:

悲观锁在操作数据的时候,保持的是一种比较悲观的状态,在每次拿取数据的时候都认为别的线程也会同时的修改数据,所以每次在拿数据的时候都会给数据上锁,这样别线程想要拿这个数据就会被阻塞,直到拿到锁。

主要的流程:

1、多个线程,如线程A,B尝试获取同步锁
2、假设线程A先加锁成功并执行对应的操作,那么线程B只能等待线程A释放锁之后才能操作,线程B处于阻塞状态
3、线程A释放同步锁,然后CPU会唤醒等待的线程,即线程B会再次尝试获取锁
4、线程B成功获取锁,再执行自己的操作

缺点:

是需要阻塞的,效率比较低

可能会造成某个线程的永久等待,即死锁的可能性比较大。
 

你可能感兴趣的:(MySQL,5.7,mysql)