锁(面试使用)

本文详细介绍了Java并发编程中的锁机制,包括volatile的作用、内存模型、并发编程的三大特性,以及synchronized和ReentrantLock的使用场景。此外,还讲解了分布式锁中的乐观锁和悲观锁,CAS算法,死锁的产生及解决方案,以及如何实现线程安全的单例模式。通过这些知识点,帮助读者深入理解Java多线程中的锁管理。
摘要由CSDN通过智能技术生成

一,volatile https://blog.csdn.net/eff666/article/details/67640648

1.作用:多线程下,某一个线程修改一个共享变量的值,那么所有的线程都能读取到新的值。保证可见性。

2.并发中内存模型:多线程下,每个cpu都会有自己的缓存,一般的共享变量都会在每一个cpu中缓存下来供使用。为了保证共享变量一致。使用lock和缓存一致性。

lock:在总线上加锁,只有等待一个线程执行完才有第二个进,效率低

缓存一致性协议:当cpu写数据时,通知其他cpu对于这个变量设置无状态,就是所有cpu缓存的数据都是无效的。然后cpu就会在内存中读取。保证一致性。

3.并发编程中的三个概念特征:

原子性:一个操作或多个操作要么全部成功,要么全部失败。转账问题

可见性:当一个线程修改共享变量时,其他线程读取到的也该是最新修改的数据

有序性:按照程序先后顺序执行逻辑处理

4.执行逻辑,原理和机制

多线程下,共享变量用这个关键字修饰。当被修改时,主存的值被修改,其他线程的缓存标识无效,去主存取值。保证所有值共享使用。且保证有序性,执行前的不变,之后按照最新的值。

5.使用场景:其实无法保证操作的原子性,需要对变量的写操作不依赖于当前值和该变量没有包含在具有其他变量的不变式中。

二。synchroniz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值