synchronized
synchronized是⼀种互斥锁,⼀次只能允许⼀个线程进⼊被锁住的代码块
synchronized是Java的⼀个关键字,它能够将代码块/⽅法锁起来
如果synchronized修饰的是实例⽅法,对应的锁则是对象实例
如果synchronized修饰的是静态⽅法,对应的锁则是当前类的Class实例
如果synchronized修饰的是代码块,对应的锁则是传⼊synchronized的对象实例
-- java3y《对线面试官》
底层原理
同步代码块是通过monitorenter和monitorexit来实现,当线程执行到monitorenter的时候要先获得monitor锁,才能执行后面的方法。当线程执行到monitorexit的时候则要释放锁
同步方法是通过中设置ACC_SYNCHRONIZED标志来实现,当线程执行有ACC_SYNCHRONI标志的方法,需要获得monitor锁。
每个对象维护一个加锁计数器,为0表示可以被其他线程获得锁,不为0时,只有当前锁的线程才能再次获得锁。
同步方法和同步代码块底层都是通过monitor来实现同步的。
每个对象都与一个monitor相关联,线程可以占有或者释放monitor。
--掘金社区 https://juejin.cn/post/6844903918653145102
monitor是什么
可以理解为一种同步工具,或者说是同步机制,操作系统的管程是概念原理,ObjectMonitor是它的原理实现。
对象与monitor怎么关联
- 对象里有对象头
- 对象头里面有Mark Word
- Mark Word指针指向了monitor
标签:同步,monitor,synchronized,CAS,对象,实例,线程 From: https://www.cnblogs.com/deity-night/p/17176844.html