代码之家  ›  专栏  ›  技术社区  ›  non sequitor

实例变量初始化的线程安全性研究

  •  5
  • non sequitor  · 技术社区  · 15 年前

    我看到了初始化实例变量的习惯用法

    public class Test{
        private Long l = 1l;
        private MyClass mc = new MyClass();
    
        public Test(){}
        ...
     }
    

    但是我更喜欢

    public class Test{
        private Long l;
        private MyClass mc;
    
        public Test(){
            l = 1l;
            mc = new MyClass();
        }
        ...
    }
    

    考虑到这些都是非最终变量,这两种方法在线程安全性方面是等效的还是一种比另一种更“正确”的方法?

    6 回复  |  直到 6 年前
        1
  •  6
  •   JaakkoK    15 年前

    this

        2
  •  1
  •   atk    15 年前

        3
  •  1
  •   Alexander Pogrebnyak    15 年前

        5
  •  0
  •   aperkins    15 年前

        6
  •  0
  •   user3675261    6 年前

    **Option 1:**
    @Component
    public class ClassA {
    
    private ClassB classB = new ClassB();
    
    public ClassB create(){
        return classB;
     }
    }
    
    **Option 2:**
    @Component
    public class ClassA {
    
    private ClassB classB = null;
    
    public ClassB create(){
        classB = new ClassB();
        return classB;
     }
    }
    
    **Option 3:**
    @Component
    public class ClassA {
    
    public ClassB create(){
        ClassB classB = new ClassB();
        return classB;
     }
    }