悲观锁:顾名思义,就是很悲观,总是假设最坏的情况。每次取数据的时候都认为其他线程会修改,所以每次在拿数据的时候都会上锁(行锁、表锁、读锁、写锁等),这样当其他线程想要访问数据时,都需要阻塞挂起。
如mysql每次查询、修改数据操作之前都会上锁,整个数据处理过程中,将数据处于锁定状态,自己更新数据后再释放锁,可以有效防止库存冲突问题。
乐观锁:顾名思义,很乐观,每次去拿数据的时候认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。