乐观锁和悲观锁是两种不同的锁机制,主要用于解决并发问题。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。悲观锁认为竞争总是会发生,因此每次对某资源进行操作时,都会先加锁,这样其他线程来访问该资源就会被阻挡在外,直到悲观锁被释放。悲观锁在常用的synchronized锁就是一个例子,synchronized锁会根据线程的竞争情况,会对锁进行升级。
相对于悲观锁,乐观锁采取了更加宽松的加锁机制。乐观锁认为竞争不总是会发生,因此它不需要持有锁,而是通过CAS(Compare And Swap)算法实现资源同步。如果CAS操作失败,则表示发生冲突,那么就应该有相应的重试逻辑。
总的来说,悲观锁和乐观锁是人们定义出来的概念,他们处理并发资源的方式不同,悲观锁采用封锁方式,而乐观锁则采用无锁+CAS的方式。