2016-06-10 74 views
1

我想这段代码是错误的,因为在完成构造函数之前,jvm可以选择运行onCreate()这个onCreate()方法是否总是在Foo()构造函数之后运行?

那么,当Foo()构造函数完成时,如何确保onCreate()将始终由另一个线程执行?

public class Foo{ 
    public Foo(){ 
     synchronized (this) { 
      new Thread(() -> { 
       synchronized (Foo.this) { 
        onCreate(); 
       } 
      }).start(); 
     } 
    } 

    protected void onCreate(){ 

    } 
} 

回答

2

使用静态工厂方法:

public class Foo { 
    // Private constructor forces instances to be created using factory method. 
    private Foo() {} 

    protected void onCreate() {} 

    static Foo newInstance() { 
    Foo foo = new Foo(); 
    new Thread(foo::onCreate).start(); 
    return foo; 
    } 
} 
相关问题