线程中的乐观与悲观锁的区别

线程中的锁可以分为乐观锁和悲观锁,这两个都是实现锁机制的两种办法。
悲观锁:根据字面意思,悲观,就是不是太好的。当一个线程访问这个数据的时候,悲观锁会把这个数据给锁住,不被其他线程所访问,直到这个线程完成了对数据的提交后,其他线程才能够访问或者操作。这样就带来了不便,比如,我们在进行网上订票的时候,一个用户访问了这个系统,访问了这个系统中数据库的数据,就把这个数据给锁住了,这样其他用户根本就看不到数据。这样显然不行,我们想要的效果是用户都可以访问数据,但是只有一个用户提交对这个数据的修改。这就要乐观锁。
乐观锁:当用户要对这个数据进行修改操作时,才把这个数据锁住,也就是实现了一个用户提交操作的用途,它的好处是,用户在查看的时候,数据并没有锁住,当要修改提交的时候,把数据锁住,当其他用户再要提交修改时,就不能修改了。其中的乐观锁里面有一个版本控制器,当修改后,版本就+1,其他用户现在的版本还是0,这样在提交的时候,发现版本号低于现在的,所以,要更新,之后在进行修改。

简单的说,悲观是进来就锁,当前一个线程走完后面的才能走,就像在排队一样,而乐观锁对访问资源的用户不做限制,当有多个用户同时修改资源的时候才会锁住资源让最先操作的那一个用户操作资源,这个时候其他用户必须拿到修改后的资源后才能再修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章