synchronized修饰静态和非静态方法有何区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1363个文字,预计阅读时间需要6分钟。
前言:最近被问到了这个问题,第一次回答也不是很好,在此参考网上答案进行整理记录。供大家学习参考。
Synchronized修饰非静态方法
Synchronized修饰非静态方法时,锁的是当前对象实例。
示例代码:javapublic class SynchronizedDemo { public synchronized void method() { // ... }}在上述代码中,如果多个线程尝试调用同一个对象的`method()`方法,它们将会因为锁的原因而交替执行。
Synchronized修饰非静态方法,实际上是对该方法所在对象的当前实例加锁。
总结:Synchronized修饰非静态方法时,锁的是当前对象实例。
前言
最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录。供大家学习参考。
Synchronized修饰非静态方法
Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。
Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。
情况1:同一个对象在两个线程中分别访问该对象的两个同步方法
结果:会产生互斥。
解释:因为锁针对的是对象,当对象调用一个synchronized方法时,其他同步方法需要等待其执行结束并释放锁后才能执行。
本文共计1363个文字,预计阅读时间需要6分钟。
前言:最近被问到了这个问题,第一次回答也不是很好,在此参考网上答案进行整理记录。供大家学习参考。
Synchronized修饰非静态方法
Synchronized修饰非静态方法时,锁的是当前对象实例。
示例代码:javapublic class SynchronizedDemo { public synchronized void method() { // ... }}在上述代码中,如果多个线程尝试调用同一个对象的`method()`方法,它们将会因为锁的原因而交替执行。
Synchronized修饰非静态方法,实际上是对该方法所在对象的当前实例加锁。
总结:Synchronized修饰非静态方法时,锁的是当前对象实例。
前言
最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录。供大家学习参考。
Synchronized修饰非静态方法
Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。
Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。
情况1:同一个对象在两个线程中分别访问该对象的两个同步方法
结果:会产生互斥。
解释:因为锁针对的是对象,当对象调用一个synchronized方法时,其他同步方法需要等待其执行结束并释放锁后才能执行。

