只要对象不变,即使对象的属性被改变,运行的结果还是同步
例如:如果A线程执行mothdA,即使B线程在等待user对象锁的过程中,A执行到(1),B还是获取不了锁,因为对象没有改变
伪代码
...
public void mothdA(User user){
...
synchronized(user){
...
user.setName("A");//(1)
...
}
...
}
...
总结:这里可以看出锁的是栈中存放的对象地址
只要对象不变,即使对象的属性被改变,运行的结果还是同步
例如:如果A线程执行mothdA,即使B线程在等待user对象锁的过程中,A执行到(1),B还是获取不了锁,因为对象没有改变
伪代码
...
public void mothdA(User user){
...
synchronized(user){
...
user.setName("A");//(1)
...
}
...
}
...
总结:这里可以看出锁的是栈中存放的对象地址