Design Pattern #3.2

Autor: NathalieOhneHerz GitHub

Das Singleton Pattern mit Thread Safety

Hauptartikel: [Design Pattern #1] Was sind die Design patterns und [Design Pattern #3] Das Singleton Pattern


Was ist das Thread Safe Singleton?

In manchen Programmen mag es nötig sein, verschärft auf Thread Safety zu achten. Das Singleton in seiner Urform ("Lazy Loading") ist dafür nicht gemacht und bedarf einer Modifikationen. Besser gesagt gibt es drei Möglichkeiten, ein Singleton Thread Safe zu machen:

  1. Man synchronisiert die gesamte Singleton#getInstance() Methode
  2. Man synchronisiert lediglich die Erzeugung
  3. Man benutzt eine Helferklasse (bzw. kein Lazy Loading) [Von Natur aus Thread Safe]


Implementierung in Java

package de.nathalieoneill.devtek.singleton.v1; /** * @author Nathalie */ public class DevTekQueenOfTheUniverse { private static DevTekQueenOfTheUniverse instance; private final String name; public DevTekQueenOfTheUniverse(String name) { this.name = name; } public static synchronized DevTekQueenOfTheUniverse getInstance() { if (instance == null) { instance = new DevTekQueenOfTheUniverse("Nathalie"); } return instance; } }
package de.nathalieoneill.devtek.singleton.v1; /** * @author Nathalie */ public class DevTekQueenOfTheUniverse { private static DevTekQueenOfTheUniverse instance; private final String name; public DevTekQueenOfTheUniverse(String name) { this.name = name; } public static DevTekQueenOfTheUniverse getInstance() { if (instance == null) { synchronized (DevTekQueenOfTheUniverse.class) { if (instance == null) { instance = new DevTekQueenOfTheUniverse("Nathalie"); } } } return instance; } }
package de.nathalieoneill.devtek.singleton.v1; /** * @author Nathalie */ public class DevTekQueenOfTheUniverse { private final String name; public DevTekQueenOfTheUniverse(String name) { this.name = name; } public static DevTekQueenOfTheUniverse getInstance() { return DevTekQueenOfTheUniverseSingletonHelper.INSTANCE; } private static class DevTekQueenOfTheUniverseSingletonHelper { private static DevTekQueenOfTheUniverse INSTANCE = new DevTekQueenOfTheUniverse("Nathalie"); } }

Ich hoffe dass ich euch das Thread Safe Singleton näher bringen konnte. Danke an PostCrafter der sich das hier gewünscht hat.

Mit freundlichen Grüßen
Nathalie