1、悲观锁: 认为多线程操作数据会导致数据出错,所以每次有一个线程操作数据时,都会先将数据锁住,再做修改,只有上一个线程释放资源锁之后,下一个线程才能操作数据(无论读写)。例子 JAVA的关键字synchronizedMySQL的select xxx for update 缺点: 效率低下长事务会导致开销无法忍受 优点: 安全性高,适用于写多读少的情况 2、乐观锁: 1、乐观锁其实为一种无锁机制,一般通过CAS(compare and swap)算法实现,java一般使用AtomicInteger类保证原子性。2、每次线程先读取需要操作数据的原始值,得到数据并记录其版本(设为V1)。3、每当有线程操作了数据时,都会使得数据的版本更改。线程操作数据时,需要将操作时的数据版本 与 读取数据的版本 相比较,若一致,则给予修改,否则,重新读取数据(更新操作),再进行操作数据。例子: 银行取钱和查余额操作。。。。。 缺点: 优点: 效率相对于悲观锁高,适用于读多写少情况。适用于长事务开发,总的来说更适合开发(废逻辑)。