………………草稿未完成…………………
1.为什么加锁
1.1.单机环境什么要加sychornized锁?
拿秒杀活动来说,当多个请求同时并发到达业务临界资源时,资源对其他线程不可见,这样会变成线程非安全的逻辑。
int total = 100;
private void buyGood(int needCount){
print(total); // 此时是一百个。
Tread.sleep(2000);
if(total > 0 && total> needCount )(
print("可以卖!");
);
}
private psvm (){
Thread1.buyGood(100);
Thread2.buyGood(100);
}
Thread1,Thread2 两个线程都售卖成功了,但是我们只有100个。造成线程不安全。 所以我们在临界资源加sychornized锁 保证了 数据的安全性。
1.2.分布式环境为什么会有并发数据问题
而当我们在单台机器处理业务能力不足时,开始使用分布式集群处理业务能力,而这样的情况下,使用sychornized锁只是对单台线程加锁,但是针对对个进程的数据安全确无法限制。所以在这里引入了分布式锁的概念。
2.测试现象
1.使用测试工具模拟并发jmeter
2.秒杀系统超买现象,引发的事故。
3.如何使用
1.redis锁
2.zookeeper
3.数据库版本比较
4.如何优化
1.正确使用
2.异常,宕机,死锁,时间过期的穿透
3.代码实战
5.可用框架
redisson