synchronized:互斥锁
什么是互斥锁?
保证同一时刻只有一个线程执行。
互斥锁用来做什么?
并发编程中原子性的产生来源于线程切换,互斥锁用来保证原子性。
互斥锁使用的的规则?
锁如果修饰静态方法时,锁的是当前CLASS对象。
修饰非静态方法时,锁的是当前实例对象this。
修饰代码块,本质锁对象
使用范例如下:
class a{
synchronized(a.class) static void x{
}
synchronized void x{
}
object obj=new object();
void x{
synchronized(obj){
}
}
}
锁的使用范围建议?
结合码出高效中的建议是使用锁的范围要尽可能小
加锁的本质是什么?
monitor:对象的隐藏属性
Java虚拟机所属对象的monitor经行加锁判断。
锁的分类?
synchronized分为偏向锁-轻量级锁–重量级锁三类锁
偏向锁:资源没有被多线程竞争情况下减少带来的性能开销
轻量级锁:当出现锁的竞争会升级为轻量级锁
重量级锁:当锁的竞争很激烈会升级为重量级锁
资源与锁的关系?
锁的设计主要是为了保护资源,从资源角度之间看待问题,资源与资源分为有关系和没关系,当资源与资源之间没有关系,那就可以给每一个资源加上锁,保持资源和锁的独立性,也可以用一把锁保护多个资源,这样就会所有的资源变成串行操作,所以适当的对资源进行精细化管理,能够提升性能,这种锁被称为细粒度锁,当资源与资源有关系时,琐的设计需要考虑具体情况和并发,较为复杂,具体情况具体分析。