悲观锁:
理解悲观锁前首先要知道什么是悲观主义,悲观主义泛指对宇宙、社会、人生悲观失望的态度、观点和理论。作为一种世界观和人生观,认为世界变幻无常,人注定要遭受苦难,因而陷入悲观绝望,甚至认为生不如死,企图超越现实,以求解脱和获得拯救。
同样的线程也会认为一个变量无时无刻处于被别人修改的状态,非常绝望,于是为了解脱,为了救赎,就把这个变量给锁了 - -!
然后锁了之后,我就可以肆意的对对象胡作为非,然后搞完事情之后释放这个锁。
好处:保证了线程的安全性。
缺点:导致其他线程中断。降低了系统并发量。
乐观锁:
与悲观相对,意思是遍观世上人、事、物,皆觉快然而自足的持久性心境。乐观是一种向阳的人生态度。威尔科克斯说过:当生活像一首歌那样轻快流畅时,笑颜常开乃易事;而在一切事都不妙时仍能微笑的人,是真正的乐观。
多个线程在面对一个变量的时候,不会犹豫它会不会被其他线程侵犯,而是抱着微微一笑的态度先去获取该变量的值,然后改前再跟之前的数据对比一下的,看看数据有没有发生变化。如果数据变了(被其他线程侵犯过),就不去执行本线程的更新操作,如果值没有变化,则去执行更新操作。
优点:无锁的操作带来了高并发的效率。
缺点:遇到数据不一致的情况,需要重新获取正确的数据,导致系统承受额外的查询循环。同时会有ABA的问题。