gpt4 book ai didi

java - 静态同步方法与所有代码都在同步块(synchronized block)中的静态方法

转载 作者:行者123 更新时间:2023-12-01 15:05:02 25 4
gpt4 key购买 nike

以下代码 fragment 取自libcore项目中的android JellyBean ReferenceQueue.java。

有人可以告诉我为什么使用同步块(synchronized block),在 ReferenceQueue.class 上同步,而不是将同步限定符添加到方法中?在这种情况下,这两种方法在功能上等效吗?

从我看过的类似问题来看,使方法同步似乎更有效。

干杯,马特

public class ReferenceQueue<T> {
... <snip> ...
public static Reference unenqueued = null;

static void add(Reference<?> list) {
synchronized (ReferenceQueue.class) {
if (unenqueued == null) {
unenqueued = list;
} else {
Reference<?> next = unenqueued.pendingNext;
unenqueued.pendingNext = list.pendingNext;
list.pendingNext = next;
}
ReferenceQueue.class.notifyAll();
}
}

最佳答案

除了方法签名之外,它们完全相同。当您使静态方法同步时,它与同步类 token 上方法的完整主体相同。当您使非静态方法同步时,它与在 this 指针上同步相同。方法签名差异很少相关,但例如它可能是编译器警告覆盖同步方法并使覆盖方法不同步。

关于java - 静态同步方法与所有代码都在同步块(synchronized block)中的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com