最常采用的是 CAS 算法,Java 原子类的递增操作就通过 CAS 自旋实现的
适合读操作多的场景,不加锁的特点能够使其读操作的性能大幅提升
乐观锁直接去操作同步资源,是一种无锁算法
乐观锁的两种实现方式...采用 Version 版本号机制
CAS(Compare-and-Swap,比较替换算法) 实现
悲观锁
认为自己在使用数据时,必然有别的线程来修改数据,因此在获取到数据的时候,进行操作之前...,会先加锁,保证数据不被别的线程所修改
synchronized 关键字与 Lock 锁的实现类均为悲观锁
适合写操作多的场景,先加锁可以保证写操作时数据正确,
显示锁定之后再进行同步资源
两种锁的伪代码比较...,正常退出或抛出异常时必须释放锁。...\LockSyncDemo.class进行编译
调用指令时检查方法的 ACC_SYNCHRONIZED 访问标志位是否被设置
若被设置了,则线程会将先持有 monitor 锁,然后再执行方法
最后在方法完成时