Singleton

Por favor si alguin pudiera ayudarme con un ejemplo simple de la programacion del singleton se lo agradeseria... si es asi por favor escribirme a mdelabat@estudiantes.uci.cu.. me estoy iniciando como programadora en java y bueno que mejor que contar con un poco de ayuda
muchas gracias por la ayuda

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

como qué?

El concepto es bastante simple, yo diría que es como el "design pattern" más simple que hay... simplemente consiste en que tienes una sola instancia de un objeto. Para lograrlo necesitas que el constructor de la clase sea privado, y un método estático que devuelva la misma instancia siempre.

Si la creación del singleton se realiza hasta que alguien lo pide, entonces necesitas sincronizar el método (para el caso en que dos hilos pidieran el objeto por primera vez de manera simultánea).

public class Singleton {

  private Singleton unico;

  private Singleton() {}

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

Por qué dos ifs? Suponte que dos hilos invocan el método al mismo tiempo. De modo que los dos llegan al primer if al mismo tiempo, y en ambos casos es nulo. Ambos llegan al bloque synchronized, y la JVM deja pasar a uno solamente, bloqueando al otro. En este momento, el que entra al bloque pasa por el segundo if, que se cumple porque todavía nadie ha creado el objeto, y entonces se crea el objeto. Ese primer hilo sale de la sección crítica y entonces el segundo hilo entra, se encuentra con el if, pero entonces ya existe el objeto, de modo que ya no lo crea nuevamente.

Si no existiera ese segundo if, tendrías fugas de memoria si dos o más hilos llegan a invocar el método al mismo tiempo. Además de que cada hilo estaría usando su propia instancia y eso te puede causar otros problemas (porque finalmente el singleton lo estás declarando así por alguna razón; tal vez tiene datos que necesitas que estén compartidos globalmente en tu aplicación).