首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java静态和非静态方法的同步行为

Java静态和非静态方法的同步行为
EN

Stack Overflow用户
提问于 2013-12-30 12:49:58
回答 3查看 1.7K关注 0票数 1

根据我的理解,非静态方法上的同步将在对象级别被阻塞,而静态方法上的同步将在类实例级别上被阻塞。

在此基础上,我对各种情况的理解如下:

  1. 非静态同步方法访问,那么其他非静态同步方法也会阻塞。
  2. 非静态同步方法访问,然后非静态非同步方法不阻塞。
  3. 该类实例的静态同步方法访问然后其他同步方法(静态和非静态)被阻塞。
  4. 静态同步方法访问,然后其他非静态非同步方法不阻塞。
  5. 静态同步方法访问,然后其他静态非同步方法不阻塞。
  6. 静态同步方法访问,然后对所有对象实例阻塞非静态同步方法。
  7. 非静态同步方法访问然后静态同步方法不阻塞

请帮我核实一下。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-30 12:53:16

我想可以更简单地解释

1)当线程进入同步实例方法时,其他线程都不能输入同一实例的任何同步实例方法。

2)当线程进入同步静态方法时,其他线程都不能输入同一类的任何同步静态方法。

票数 7
EN

Stack Overflow用户

发布于 2013-12-30 12:53:14

静态同步方法只锁定表示该类的class实例。锁定类不会阻止任何其他方法,例如非静态方法。

例如:

代码语言:javascript
复制
class MyClass {
    public static synchronized void method() {
        // something 
    }

等于

代码语言:javascript
复制
class MyClass {
    public static void method() {
        synchronized(MyClass.class) {
            // something 
        }
    }
票数 3
EN

Stack Overflow用户

发布于 2015-01-08 10:15:46

有两种类型的锁:对象级别和类级别。

对象级锁适用于非静态同步方法.每个对象在使用该方法时都有一个锁,对象首先获取该锁,然后执行该方法中的代码。

类级锁适用于静态同步方法。每个类都有一个锁,该锁在调用同步静态方法时使用。

以下是你的问题的答案:

  1. 错误
  2. 真的
  3. 静态同步方法不能访问非静态同步方法。但是,非静态同步方法可以访问静态同步方法.如果我们访问静态同步方法,那么所有静态同步方法都会被阻塞,但是我们可以访问其他静态和非静态方法。
  4. 静态同步方法访问不会阻止其他非静态、非同步方法.
  5. 静态非同步方法是可访问的。
  6. 如上所述,非静态同步方法将被阻塞。
  7. 对象级锁可以包含类级锁,这意味着非静态同步方法可以调用静态同步方法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20839936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档