乐观锁、悲观锁、读写锁、互斥锁

# 乐观锁、悲观锁、读写锁、互斥锁之间的关系 >i 乐观锁、悲观锁 同一维度的概念,都是从数据访问的角度来说。所以经常出现在数据库相关问题中、 即当数据同时被多个对象访问了,应该持什么态度来对数据进行保护 悲观锁认为,数据被访问,对方很可能要修改这个数据。所以在此思想的引导下,数据被访问时,不管是读还是写,步步加锁。严格排斥其他对象的访问。 乐观锁认为,数据被访问,对方不大可能要修改这个数据。所以在此思想的引导下,一个对象读这个数据,不会排斥其他的访问(包括读和写),只有在自己写的时候,通过cas的方式,确定自己写的时候,没人动过这个数据。有人动过,则取消重读再重试。 <font color=red>这两种锁,是两种思想。</font> >i 互斥锁和读写锁 <img src="https://oscimg.oschina.net/oscnet/up-29756f45bed4a99a0cb204238c1d0686f95.png" width=500 height=400> 这两个是同一维度的概念,都是从“读写行为”本身角度来说的,所以经常出现的编程相关问题中:即当读写一个变量时,其他人也要读写此变量,应该制定怎样的规则,不至于让数据乱套。 互斥锁的规则,即所有单个的读、写行为互斥、资源独占 ,读的时候别人不能读也不能写。写的时候,别人不能读也不能写。 读写锁的规则,读读不互斥,凡是带写的操作互斥。读的时候别人可以读但不能写。写的时候,别人不能读也不能写。 <font color=red>这两种锁,是实实在在的锁。</font> 总结 互斥锁其实很符合悲观锁的思想,但二者不能混为一谈。毕竟描述角度不一样,就像老婆做的饼和老婆饼一样,虽然都叫饼,老婆做的饼是一类饼,老婆饼是特定一种商品。 读写锁跟乐观锁更是没有一毛钱关系。乐观锁没有锁定任何数据,只是通过对比+重试实现数据不乱套。