对于下面的代码是否完全是线程安全的并且不会泄漏"这个"我将不胜感激。参考?我尝试做的主要是使用ExecutorService在后台线程中引导/初始化另一个服务。
我只是稍担心,因为我从某个地方读到,从构造函数启动一个线程是不好的做法,因为它会泄漏"这个"在完全构造类之前的引用。
public class MyService {
private final ExecutorService executorService;
private volatile AnotherService anotherService;
private volatile boolean isReady = false;
public MyService(final ExecutorService executorService) {
this.executorService = executorService;
start();
}
private void start() {
executorService.submit(new Runnable() {
@Override
public void run() {
try {
anotherService = init();
isReady = true;
} catch (Exception e) {
// do nothing, just retry later
}
}
});
}
private AnotherService init() {
// some code to initialize
return AnotherServiceBootstrap.getInstance().bootstrap();
}
// some other methods in class
}
非常感谢提前!
答案 0 :(得分:0)
我认为您的代码没有任何风险 -