ef2*_*011 13 java synchronized
我读到了synchronized(this)应该避免的各种原因.然而,我遇到的一些可敬的代码在构造函数中使用以下代码:
public SomeClass(Context context) {
if (double_checked_lock == null) {
synchronized (SomeClass.class) {
if (double_checked_lock == null) {
// some code here
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否真的之间的差异synchronized(this)和synchronized(SomeClass.class)?
DNA*_*DNA 26
synchronized(this)在当前对象上同步,因此只有一个线程可以访问每个实例,但不同的线程可以访问不同的实例.例如,每个线程可以有一个实例.
这通常有助于防止多个线程同时更新对象,这可能会创建不一致的状态.
synchronized(SomeClass.class)在当前对象的类(或者如果有人希望的另一个类)上同步,因此一次只有一个线程可以访问该类的任何实例.
这可能用于保护在类的所有实例(实例高速缓存或实例总数的计数器)之间共享的数据不会进入不一致状态.
| 归档时间: |
|
| 查看次数: |
4283 次 |
| 最近记录: |