【问题标题】:What does synchronized on a static method do? [duplicate]静态方法上的同步有什么作用? [复制]
【发布时间】:2011-07-10 17:54:26
【问题描述】:

可能重复:
How do synchronized static methods work in Java?

我想知道如果在静态方法上使用同步会发生什么。该类是否锁定了该方法?这与非静态方法上的同步有什么不同?

谢谢

【问题讨论】:

标签: java concurrency


【解决方案1】:

This question 对上述问题有很多高质量的答案。

【讨论】:

    【解决方案2】:

    是的,类“获取”锁而不是实例(正如布鲁诺指出的那样,这个术语并不精确。线程使用类对象或实例作为锁定对象来获取锁)。这意味着,如果这些方法在它们各自的实例上同步,则可以有 3 个线程同时执行 3 个同步方法。如果方法在类上同步,那么只有一个线程可以执行它。

    【讨论】:

    • 那么同步非静态方法有什么意义呢?对不起,如果这是一个愚蠢的问题:S
    • 同步实例方法可防止两个线程尝试对 same 实例进行操作。线程 1 和线程 2 都引用了实例 A。
    • “类获得锁而不是实例”?!一个类永远不会得到锁。它是一个“获取”锁的线程,这些锁与对象相关联。
    • @Bruno:对象,在静态方法的情况下,是类对象
    • @Bruno,是的,我使用了不精确的术语,因此它与原始海报使用的术语相同,以便他/她能够理解。是的,线程“获得”了锁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多