首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用同步静态方法,那么可以访问其他静态方法吗?

调用同步静态方法,那么可以访问其他静态方法吗?
EN

Stack Overflow用户
提问于 2014-11-02 10:27:35
回答 1查看 148关注 0票数 0

我有一个关于同步静态方法的问题。

如果调用同步静态方法,是否意味着在同步静态方法结束之前不能访问该类和其他方法(包括静态方法或不静态方法)?

当同步静态方法是锁定类对象时,为什么可以同时调用其他静态方法?

代码语言:javascript
运行
复制
class Y {
    static synchronized void staticSleep() {
        System.out.println("Start static sleep");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        System.out.println("End static sleep");
    }
    static void staticSleepNoSyn() {
        System.out.println("Start static NoSyn sleep");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        System.out.println("End static NoSyn sleep");
    }
} 

public class X {
    public static void main(String[] args) {
        for (int i = 0; i < 2; ++i) {
            new Thread(new Runnable() {

                public void run() {
                    Y.staticSleep();
                }
            }).start();
        }

        for (int i = 0; i < 10; ++i) {
            new Thread(new Runnable() {

                public void run() {
                    Y.staticSleepNoSyn();
                }
            }).start();
        }
    }
}

产出:

开始静态睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 启动静态NoSyn睡眠 结束静态睡眠 开始静态睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 端静态NoSyn睡眠 结束静态睡眠

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-02 12:19:06

我明白你现在的要求了。

如果调用同步静态方法,是否意味着在同步静态方法结束之前不能访问该类和其他方法(包括静态方法或不静态方法)?

如果这两种方法都是synchronized或使用synchronized块,并且它们在同一件事情上同步(即相同的Class或相同的this ),那么您将得到互斥。

在您的示例中,有一个方法不是synchronized (而且它不使用synchronized块),因此它不会被锁在门外。事实上,没有什么能阻止staticSleepNoSyn .正如你所写的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26698305

复制
相关文章

相似问题

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