首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java同步静态方法:锁定对象或类

Java同步静态方法:锁定对象或类
EN

Stack Overflow用户
提问于 2009-01-13 08:48:39
回答 8查看 99.9K关注 0票数 150

Java文档中写道:

对同一对象的两次同步方法调用不可能交错。

这对静态方法意味着什么?由于静态方法没有关联的对象,那么synchronized关键字会锁定类而不是对象吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-01-13 00:53:31

由于静态方法没有关联的对象,所以synchronized关键字会锁定类而不是对象吗?

是。:)

票数 132
EN

Stack Overflow用户

发布于 2009-01-13 02:58:42

只是为了给奥斯卡增加一点细节(简洁得令人愉悦!)回答,Java Language Specification的相关部分是8.4.3.6, 'synchronized Methods'

同步方法在执行之前获取一个监视器(§17.1)。对于类(静态)方法,使用与该方法的类的class对象相关联的监视器。对于一个实例方法,使用与此关联的监视器(调用该方法的对象)。

票数 202
EN

Stack Overflow用户

发布于 2009-01-13 11:02:44

你必须注意的一点(几个程序员通常会落入这个陷阱)是同步的静态方法和同步的非静态方法之间没有联系,即:

class A {
    static synchronized f() {...}
    synchronized g() {...}
}

Main:

A a = new A();

线程1:

A.f();

线程2:

a.g();

f()和g()彼此不同步,因此可以完全并发执行。

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

https://stackoverflow.com/questions/437620

复制
相关文章

相似问题

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