锁的相关知识

一,什么是锁?
锁可以理解为将资源私有化的一种物品,它可以让某个方法,变量在某一时刻下
只能被一个线程占用,只有当锁被释放了,其他的线程才能用。
==========================================================================
二,为什么要用锁?
如果不用锁,多个线程同时进入方法,如果业务处理的是减库存的情况,比如(高铁
卖票),就会出现由高并发带来数据混乱的问题。
===============================================================================
三,如何理解同步和异步?
同步是需要排队,同一时刻只能有一个线程独占资源。
异步不需要排队,线程间互相不等待,互相抢占资源。
异步效率高
同步机制:多线程 + 有共享数据 + 多条语句操作共享数据
将操作数据的代码块上锁 synchronized()
===============================================================================
四,多线程同步
多个线程调用同一个对象的同步方法会阻塞,调用不同对象的同步方法不会阻塞。
比如:在一个类中有两方法,分别用synchronized修饰的静态方法(类锁)和
非静态方法(对象锁)。多线程访问两个方法的时候,线程会不会阻塞?
不会阻塞
1.要满足方法同步就必须保证多线程访问的是同一个对象。
2.类锁和对象锁同时存在时,多线程访问时不会阻塞,因为他们不是一个锁。
===============================================================================
五,方法锁,对象锁,类锁。
方法锁、对象锁可以修饰方法,代码块。
类锁可以修饰静态方法或修饰类。

01、修饰方法

02、锁代码块

03、修饰静态方法或修饰类

 


===============================================================================
六,悲观锁和乐观锁。
悲观锁:悲观锁认为竞争总是会发生,因此每次对某资源进行操作时,都会持有一个独占的锁。
乐观锁:乐观锁认为竞争不总是会发生,因此它不需要持有锁。
悲观锁也叫做排他锁,就是只能有一个线程进行,其他线程不能进行。
乐观锁允许多个线程同时进行,但只能有一个线程修改成功。
例如:
synchronized 互斥锁+ReentrantLock 排他锁都是悲观锁。
ReentrantReadWriteLock 读写锁是乐观锁。
读写锁内部又分为读锁和写锁,读锁可以在没有写锁的时候被多个线程同时持有,
写锁是独占的,读锁和写锁分离从而提升程序性能。
===============================================================================
七,ReadWriteLock和ReentrantReadWriteLock 是什么?
ReadWriteLock 是一个读写锁接口,
ReentrantReadWriteLock是ReadWriteLock 接口的一个具体实现。
读写锁是用来提升并发程序性能的锁分离技术,读锁是共享的,写锁是独占的。
-------------------
为什么会有 ReadWriteLock?
ReentrantLock,是为了防止线程A在写数据、线程 B 在读数据造成的数据不一致,
但这样,如果线程C在读数据、线程D也在读数据,读数据是不会改变数据的,没有必要加锁,
但是还是加锁了,降低了程序的性能。因为这个,才诞生了读写锁 ReadWriteLock。
===============================================================================
八,什么是ReentrantLock,以及实现原理?
ReentrantLock重入锁,是实现Lock接口的一个类,表示能够对共享资源重复加锁。
原理:
1.在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功,
2.2. 由于锁会被获取n次,那么只有锁在被释放同样的n次之后,该锁才算是完全释放成功。
===============================================================================
九,什么是分布式锁以及由来?
当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。
由来:
在传统单机部署的情况下,可以使用Java并发处理相关的API进行互斥控制,但是在分布式系统后,
由于分布式系统是多进程,并且分布在不同机器上,这将使原单机并发控制锁策略失效,
为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁的由来。
===============================================================================
十,库存超卖问题的技术解决方案。
悲观锁,分布式锁,乐观锁,队列串行化,Redis原子操作。
===============================================================================


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值