多线程总结☞锁机制

1:多线程共享资源的时候,一个要分出先来后到的,多线程的同步机制实际上是靠锁来完成的
2:线程同步的方式:三种方式--(1)在方法上加synchronized关键字(2)在需要做同步的代码段上加synchronized(3)使用lock锁
3:从JVM角度看待锁:JVM需要对两类线程共享的数据进行协调(保存在堆中实例变量和方法上的类变量)
4:一个线程可以多次对同一对象上锁,对于每一个对象,java虚拟机维护一个加锁计数器,线程每获取一次该对象,计数器+1,每释放一次,计数器-1,当为0时就代表锁被完全释放
5:在java程序中,只需要使用synchronized块和synchronized方法来标志一块区域,每次进入这块区域时,JVM自动锁上对象或类
6:何时要同步?读取上一次可能由另一个线程写入的变量,写入下一次可能由另一个线程读取的变量
7:对共享资源的访问必须是顺序的,也就是说当多个线程对共享资源进行访问的时候,只能有一个线程获得该对象的锁,
比如 当线程A 想获取线程B的锁时候,线程A必须等待或者阻塞,直到线程B释放锁为止
java内置锁也称为互斥锁,也就是说锁实际上是一种互斥机制
8:根据使用方式不同,我们将锁分为对象锁和类锁,两个锁之间的差别还是很大的
对象锁作用在实例方法上或者对象上面,类锁作用在静态方法上或者Class对象上面
一个类可以有多个实例对象,所有一个类的对象锁可以有多个,但是每个类只有一个Class对象 所以类锁只有一个
9:死锁是多线程开发中比较常见的问题,若有多个线程访问多个资源的时候,相互之间存在竞争,就会出现死锁,
当一个线程等待另一个县城持有的锁时,而另一个线程也在等待该线程所持有的锁时、
这时候两个线程就会处于阻塞状态,程序便出现死锁
10:ReentrantLock是一种标准的互斥锁,每次只有一个线程能持有锁,读写锁不一样,暴露了两个lock对象,一个用于读取 一个用于写入操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值