仅同步静态变量的分配

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) { 

         ...