并发原子性技术之加锁方式

1. 锁的分类

乐观锁与悲观锁

  • 乐观锁:在并发环境下,一般情况认为是属于读多写少的情况,没有数据冲突,当对共享资源发生写操作的时候,会先检测当前版本的数据与先前版本数据是否一致,如果不一致说明有其他线程已经发生写操作,需要重复进行读取然后检测再尝试修改,比如CAS机制,zk最优先通过最新主版本的策略来选举master,数据库根据版本更新数据等
  • 悲观锁:在并发环境下,认为竞争非常激烈,于是在对共享资源发生写操作的时候先加上锁,然后执行临界区代码完成操作再释放锁,其他线程获取相同的锁需要进行等待,处于阻塞状态
  • 乐观锁与悲观锁示例伪代码:
// 使用java以及数据库的操作方式演示乐观锁与悲观锁
// optimistic.java
AtomicInteger count = new AtomicInteger();
run(){
	// cas instance

猜你喜欢

转载自blog.csdn.net/wind_602/article/details/104114033