Java Planet

O Javie i jej otoczeniu

Java Singleton

Wydaje się, że singleton to jeden z prostszych wzorców projektowych. Jednak jego prawidłowa implementacja w języku Java może przysporzyć sporo problemów. Poniżej przedstawiam implementację, która powinna być bezpieczna w środowisku wielowątkowym, a zarazem nadal wydajna.

/**
 * Przykładowa implementacja Singleton w języku Java
 * http://en.wikipedia.org/wiki/Singleton_pattern
 *
 * Dodatkowo wykorzystujemy wzorzce:
 * - http://en.wikipedia.org/wiki/Lazy_initialization
 * - http://en.wikipedia.org/wiki/Double-checked_locking
 *
 * @author sebastian@....eu
 * @since 2010-04-15
 */
public class Singleton {

	// volatile - ważny modyfikator dla poprawnej implementacji DoubleCheckLocking
	private volatile static Singleton instance;

	// zabezpieczamy się przed "zewnętrznym", bezpośrednim tworzeniem
	private Singleton(){
	}

	public static Singleton getInstance(){
		// lazy initialization - obiekt tworzony jest dopiero w momencie pierwszej próby dostępu
		// double check locking - ponieważ wykoanie bloku synchronized jest kosztowne - najpierw upewniamy się czy taki blok otwierac
		if (instance == null) {
			synchronized (Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
				return instance;
			}
		} else {
			return instance;
		}
	}

}

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

COMMENTS

No Comments

There are no comments posted yet. Be the first one!

Leave a Replay