我完全对这个代码感到困惑,因为我知道目的是让线程安全地访问对象DataService的单个实例,但是我不知道它是否可以实现。

它对我来说很突出
来电者类别:

protected final DataService dataService = DataService.getInstance();


单例类方法:

private static DataService dService=null;
public static synchronized DataService getInstance() {
    if (dService == null)
        dService = new DataService();
    return dService;
}


通过在调用类中使用受保护的final修饰符可以实现什么?

它们是必要的又是一种好的做法吗?

最佳答案

第一行中的protected和final修饰符对您所指的单例性质没有任何贡献。

保护只是访问修饰符,而final确定是否可以重新分配变量。

definition of singleton真正使之成为一个单例的事实是,您只能创建一个dService对象(通过new DataService()),并且由于该方法是同步的,因此可以保证不会同时调用该方法。这可能会导致错误地创建两个单独的对象。

关于java - 在Java中注入(inject)/访问线程安全单例的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35144614/

10-14 00:14