ExecutorService的线程安全静态初始化

我试图基于初始化按需持有人习惯用法创建一个线程安全的单例类。这是我的代码

public class Check{ 

private Check(){ }

private static class Provider {

static final ExecutorService INSTANCE = new ThreadPoolExecutor(5, "read this val from file", 60L, TimeUnit.SECONDS, new LinkedBlockingQueue());

}

public static ExecutorService getInstance() {

return Provider.INSTANCE;

}

}

我的期望是以线程安全的方式初始化ExecutorService,并且那里只有一个实例(静态)。

这段代码是实现了这一目标-还是需要任何更改?

回答:

根据SEI

指南,您的方法很好。

但是,由于我们有枚举,因此可以使用枚举的简单方法:

public enum Service {

INSTANCE;

private final ExecutorService service = ...

public getService() { return service ; }

而且,如果您想变得真正聪明,还可以定义枚举实现的接口。因为这样您以后可以 该单例的用法。这对于使用相同线程执行服务替换编写单元测试非常有帮助。

以上是 ExecutorService的线程安全静态初始化 的全部内容, 来源链接: utcz.com/qa/405220.html

回到顶部