Jos*_*lds 6 java multithreading synchronization
简单的问题:
为什么这是首选:
public class Foo {
final private static Object foo = new Object();
public static void doSomething() {
synchronized(Foo.foo) {
//code
}
}
}
Run Code Online (Sandbox Code Playgroud)
对此:
public class Foo {
public static void doSomething() {
synchronized(Foo.class) {
//code
}
}
}
Run Code Online (Sandbox Code Playgroud)
或这个:
public class Foo {
public synchronized static void doSomething() {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
?
对我来说,这些看起来基本相同,所以我不确定什么是同步访问静态字段的最佳方法,或者为什么一个会比另一个好,但我听说第一个通常是首选.
这是关于封装.如果您正在锁定私有字段,则没有其他代码可以锁定同一对象.如果您正在锁定类对象或实例,则系统中可以访问类实例的任何其他代码也可以锁定同一对象,从而引入意外的同步问题,例如锁定顺序违规导致的死锁.
归档时间: |
|
查看次数: |
130 次 |
最近记录: |