gpt4 book ai didi

java - synchronized(this) 和 synchronized(ClassName.class) 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:24 28 4
gpt4 key购买 nike

我在某处读到,对于 various reasons 应该避免 synchronized(this) .然而,我遇到的一些值得尊敬的代码在构造函数中使用了以下内容:

public SomeClass(Context context) {
if (double_checked_lock == null) {
synchronized (SomeClass.class) {
if (double_checked_lock == null) {
// some code here
}
}
}
}

synchronized(this)synchronized(SomeClass.class) 真的有区别吗?

最佳答案

synchronized(this)是在当前对象上同步的,所以只有一个线程可以访问每个实例,但是不同的线程可以访问不同的实例。例如。每个线程可以有一个实例。

这通常有助于防止多个线程同时更新一个对象,这可能会造成不一致的状态。

synchronized(SomeClass.class) 在当前对象的 class 上同步(如果需要,也可以是另一个类),因此一次只有一个线程可以访问 < em>该类的任何实例。

这可能用于保护在一个类的所有实例之间共享的数据(实例缓存,或者实例总数的计数器,也许)进入不一致状态。

关于java - synchronized(this) 和 synchronized(ClassName.class) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9056190/

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