悲观锁认为被它保护的数据是极其不安全的,每时每刻都有可能变动,一个事务拿到悲观锁后(可以理解为一个用户),其他任何事务都不能对该数据进行修改,只能等待锁被释放才可以执行。
乐观锁的“乐观情绪”体现在,它认为数据的变动不会太频繁。因此,它允许多个事务同时对数据进行变动。但是,乐观不代表不负责,那么怎么去负责多个事务顺序对数据进行修改呢?乐观锁通常是通过在表中增加一个版本(version)或时间戳(timestamp)来实现,其中,版本最为常用。

数据库

数据库实现悲观锁
select num from goods where id = 1 for update;
数据库实现乐观锁:
update tb_goods set salary=salary+2000 where user_id=1 and version=1

Java

java代码实现悲观锁:
synchromized
java代码实现乐观锁:
CAS