synchronized修饰静态和非静态方法有何区别?

2026-05-26 08:140阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1363个文字,预计阅读时间需要6分钟。

synchronized修饰静态和非静态方法有何区别?

前言:最近被问到了这个问题,第一次回答也不是很好,在此参考网上答案进行整理记录。供大家学习参考。

Synchronized修饰非静态方法

Synchronized修饰非静态方法时,锁的是当前对象实例。

示例代码:javapublic class SynchronizedDemo { public synchronized void method() { // ... }}在上述代码中,如果多个线程尝试调用同一个对象的`method()`方法,它们将会因为锁的原因而交替执行。

Synchronized修饰非静态方法,实际上是对该方法所在对象的当前实例加锁。

总结:Synchronized修饰非静态方法时,锁的是当前对象实例。

前言

最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录。供大家学习参考。

Synchronized修饰非静态方法

Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。

Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。

情况1:同一个对象在两个线程中分别访问该对象的两个同步方法

结果:会产生互斥。

解释:因为锁针对的是对象,当对象调用一个synchronized方法时,其他同步方法需要等待其执行结束并释放锁后才能执行。

阅读全文

本文共计1363个文字,预计阅读时间需要6分钟。

synchronized修饰静态和非静态方法有何区别?

前言:最近被问到了这个问题,第一次回答也不是很好,在此参考网上答案进行整理记录。供大家学习参考。

Synchronized修饰非静态方法

Synchronized修饰非静态方法时,锁的是当前对象实例。

示例代码:javapublic class SynchronizedDemo { public synchronized void method() { // ... }}在上述代码中,如果多个线程尝试调用同一个对象的`method()`方法,它们将会因为锁的原因而交替执行。

Synchronized修饰非静态方法,实际上是对该方法所在对象的当前实例加锁。

总结:Synchronized修饰非静态方法时,锁的是当前对象实例。

前言

最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录。供大家学习参考。

Synchronized修饰非静态方法

Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。

Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。

情况1:同一个对象在两个线程中分别访问该对象的两个同步方法

结果:会产生互斥。

解释:因为锁针对的是对象,当对象调用一个synchronized方法时,其他同步方法需要等待其执行结束并释放锁后才能执行。

阅读全文