synchronized

2020-06-23  本文已影响0人  奔向学霸的路上

线程安全是并发编程中的重点,造成线程安全问题主要诱因又两点,一是存在共享数据(临界资源),二是存在多条线程共同操作共享数据。为了解决这个问题,我们需要一个方案,也就是当存在多个线程操作共享变量的时候,进行加锁控制让同一时刻只有一个线程操作共享变量,其他线程等待,这种方式叫做互斥锁。

synchronized作用

synchronized的三种应用方式

synchronized底层语义

Java对象头

在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充

synchronized锁

synchronized锁是可重入的

偏向锁

大多数情况下,都是单线程访问,不会存在并发的情况,为了减少锁的获取,引入了偏向锁

轻量级锁

轻量级锁所适应的场景是线程交替执行同步块的场合,如果存在同一时间访问同一锁的场合,就会导致轻量级锁膨胀为重量级锁。


image.png

重量级锁

重量级锁标识为10,通过monitor对象来实现,每个对象都存在一个monitor与之关联,monitor存在于每个对象的对象头中,这也就是为什么每个对象都能做锁,且wait/notify/notifyAll等方法存在于Object中的原因。

上一篇 下一篇

猜你喜欢

热点阅读