仅同步静态变量的分配
synchronizing only the assigning of a static variable
我有一个静态变量,它会被大量获取。我想同步初始化,但希望它是延迟加载的。所以没有让它成为最终版本。
这是 correct/acceptable 方法吗?
这是代码。
public class Test {
private static Object staticObj;
public static Object getStaticObj() throws Exception{
if(staticObj == null){
assignNewStaticObj();
}
return staticObj;
}
private static void assignNewStaticObj(){
synchronized(staticObj){
if (staticObj == null) {
staticObj = new Object();
}
}
}
}
您可以在 static
的其他东西上同步,既便宜又不懒惰:
public class Test {
...
private static Object staticObjSync = new Object();
...
private static void assignNewStaticObj() {
synchronized(staticObjSync) {
...
我有一个静态变量,它会被大量获取。我想同步初始化,但希望它是延迟加载的。所以没有让它成为最终版本。
这是 correct/acceptable 方法吗?
这是代码。
public class Test {
private static Object staticObj;
public static Object getStaticObj() throws Exception{
if(staticObj == null){
assignNewStaticObj();
}
return staticObj;
}
private static void assignNewStaticObj(){
synchronized(staticObj){
if (staticObj == null) {
staticObj = new Object();
}
}
}
}
您可以在 static
的其他东西上同步,既便宜又不懒惰:
public class Test {
...
private static Object staticObjSync = new Object();
...
private static void assignNewStaticObj() {
synchronized(staticObjSync) {
...