java 多线程 乐观锁 悲观锁_关于多线程:悲观锁与乐观锁

何为乐观锁

每次都假如最坏的状况,每次拿数据都认为他人会批改,所以每次在拿数据时都会进行加锁操作。Java中synchronized和ReentrantLock等独占锁就是乐观锁思维的实现。

何为乐观锁

每次都假如最好的状况,每次拿数据都认为他人不会批改,所以每次在拿数据时都不会上锁,但如果进行更新操作,便会判断其他人是否在此期间曾经进行过更新的操作,能够应用版本号和CAS算法(Compare And Swap,比拟与替换算法)来实现。

两种锁的应用场景

乐观锁多应用于多写的场景下

乐观锁多应用于多读的场景下

两种锁的代码实现

乐观锁实现计数器

应用synchronized实现:

public class Counter{

private int count;

public synchronized int count(){

return ++count;

}

}

应用Lock实现:

public class Counter{

private int count;

private Lock lock = new ReetrantLock();

public int count(){

lock.lock();

try{

return ++count;

}finally{

lock.unlock();

}

}

}

乐观锁实现计数器

public class Counter{

private AtomicInteger ai = new AtomicInteger();

public int count(){

return ai.incrementAndGet(); //AtomicInteger类应用到了CAS算法

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值