对象锁相关知识有精通的前辈吗?

堆是多线程共享的,堆中存放实例变量,而栈是线程私有的,用来存放方法(一个方法对应一个栈帧)。为什么对象锁却锁的是方法而不是实例变量?比如synchronied修饰一个方法。

synchronied修饰一个方法,如果是成员函数,那么它锁的就是对象实例。

无论synchronied修饰一个方法,还是一个对象。只要作用的对象是非静态的,锁的就是对象。如果作用的静态的,该类的所有对象都一把锁。

Synchronized修饰方法时,默认锁定当前对象this,在修饰代码块时可以显示指定锁定其他对象,如Synchronized(obj){.....};所以说,sychronized一直修饰的都是对象,只是看起来写法不同而已