1、悲观锁是当线程晌纯拿到资源时,就对资源上锁,并在提交后,才释放锁资源,其他线程才能使用资源。
2、乐观锁是当线程拿到资源时,上乐观锁,在提交之前,其他的锁也可以 *** 作这个资源,当有冲突的时候,并发机制会保留前一个提交,打回后一个提交,让后一个线程重新获取资源后,再 *** 作,然后提交。和git上传代码一样,两个线程都不是直接获取资源本身,而是先获取资源宴悉咐的两陆码个copy版本,然后在这两个copy版本上修改。
3、悲观锁和乐观锁在并发量低的时候,性能差不多,但是在并发量高的时候,乐观锁的性能远远优于悲观锁。
4、常用的synchronized是悲观锁,lock是乐观锁。
乐观锁:这个世界是美好的,别人肯对不会在宏睁我 *** 作数据前进行更改。在redis中,乐观锁指的是只是对key上锁,只要key不变就代表不会出问题。redis中的事务multi默认使旁埋用乐观锁,这将会导致一个问题:在秒杀这种高并发环境下,容易造成超卖问题。如,在一件商品只剩一件时,这时A用蔽启岁户开启事务只准备抢购,而就在A完成事务之前,B用户已经抢了这件商品,当A完成事务后,库存数量为-1。为了解决这个问题,可以引进悲观锁。
悲观锁:这个世界一切东西都是不可信的。在redis中,悲观锁指的是对数据key和都value都上锁,只要这个数据有一点小改动,事务将失败。因此上面的秒杀活动,在开启事务前,可对库存上锁:watch,只要在这个watch之后,别的进程或线程对这个库存有修改,本线程的事务将不会执行成功。
悲观锁就陪宏是友乱消数据库里面锁住 类似for update查询乐观锁不是在数据库端锁住的
而是程序控制的
你说的那Mybatis我不知道是什么
但是乐观锁一般是这样
比如你数据库中有一条记录
你可以给他加上一个版本号
这样
如果同时有2个人查询出那个数据要修改
第一个人先查出来有事走了
第二个人查出来给改了
这时候你看
第一个人查出来的数据版本号比如是1
第二个人查出来也是1 但是他改了数据以后版本号变成2
这时候第一个人回来了继续修改数据
他的好知版本号是1 比2低
这时候就告诉他数据过期
乐观锁大概就是这个意思
是一种思路!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)