#1 DP: Singleton

O que é? Singleton é um padrão de projeto criacional, a ideia é criar uma instancia que será compartilhada por N outras instancias Essa instancia vai ser guardada no Heap da JVM onde ela só sera encerrada pelo garbage collector(GC) quando a aplicação for finalizada Atenção no construtor privado para que não seja possível criação de novas instancias. Exemplo public class Singleton { private static Singleton instance; private Integer value; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } public void setValue(Integer value) { this.value = value; } public Integer getValue() { return value; } } Concorrência Esse código trata corretamente da concorrência, usando o padrão conhecido como Double-Checked Locking. Isso garante que a instância seja criada uma única vez mesmo em ambientes com múltiplas threads. Imagine que seu Singleton representa, por exemplo, a cotação atual do dólar: Se duas requisições simultâneas alterarem esse valor sem controle, você pode ter dados inconsistentes. Com synchronized e volatile, isso é evitado de forma segura. public class Singleton { private static volatile Singleton instance; private Integer value; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } public void setValue(Integer value) { this.value = value; } public Integer getValue() { return value; } }

Apr 29, 2025 - 20:56
 0
#1 DP: Singleton

O que é?

Singleton é um padrão de projeto criacional, a ideia é criar uma instancia que será compartilhada por N outras instancias

Essa instancia vai ser guardada no Heap da JVM onde ela só sera encerrada pelo garbage collector(GC) quando a aplicação for finalizada

Atenção no construtor privado para que não seja possível criação de novas instancias.

Exemplo

public class Singleton {

    private static Singleton instance;

    private Integer value;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
          instance = new Singleton();        
         }

        return instance;
    }

    public void setValue(Integer value) {
        this.value = value;
    }

    public Integer getValue() {
        return value;
    }
}

Concorrência

Esse código trata corretamente da concorrência, usando o padrão conhecido como Double-Checked Locking.

Isso garante que a instância seja criada uma única vez mesmo em ambientes com múltiplas threads.

Imagine que seu Singleton representa, por exemplo, a cotação atual do dólar:

Se duas requisições simultâneas alterarem esse valor sem controle, você pode ter dados inconsistentes.

Com synchronized e volatile, isso é evitado de forma segura.

public class Singleton {

    private static volatile Singleton instance;

    private Integer value;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    public void setValue(Integer value) {
        this.value = value;
    }

    public Integer getValue() {
        return value;
    }
}