---
title: 'Thema der Woche: Double-checked locking'
url: 'https://tutego.de/blog/javainsel/2010/04/thema-der-woche-double-checked-locking'
markdown: 'https://tutego.de/blog/javainsel/2010/04/thema-der-woche-double-checked-locking.md'
date: '2010-04-21'
description: 'Lies und erkläre, wo es genau bei public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { //1 if (instance == null) //2 instance = new Singleton(); //3 } } return instance; } zu einem Problem bei nebenläufigen Thread…'
taxonomy:
  category:
    - 'Die wöchentliche Dosis Java'
---

# Thema der Woche: Double-checked locking

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Thema der Woche: Double-checked locking

21.04.2010 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Lies und erkläre, wo es genau bei

```java
public static Singleton getInstance()
{
  if (instance == null)
  {
    synchronized(Singleton.class) {  //1
      if (instance == null)          //2
        instance = new Singleton();  //3
    }
  }
  return instance;

}
```

zu einem Problem bei nebenläufigen Threads kommen kann. Warum funktioniert es auch bei 2 synch. Blöcken nicht? Was hat das dem Memory-Modell zu tun?

Hinweis: Es geht nicht darum, ein Singleton korrekt zu implementieren, sondern das Java Memory Modell zu verstehen und Probleme aufzudecken, die sich aus der Nebenläufigkeit ergeben.

Kategorien: [Die wöchentliche Dosis Java](https://tutego.de/blog/javainsel/category/die-woechentliche-dosis-java/)

## 3 Kommentare

**Frakturfreund** · [23.04.2010 23:51](#comment-110)

Ein sehr schönes Interview, vielen Dank für den Link!

**andi** · [23.04.2010 18:27](#comment-109)

Hallöchen, unter Java 5 kann man das Double-checked locking sicher implementieren, wenn die Instanzvariable volatile deklariert wird. Da es sich beim Singleton um eine statische Variable handelt könnte neben dem schon angesprochenen Weg über das Enum, auch das sog. "Lazy initialization holder class idiom" implementiert werden (vgl. http://java.sun.com/developer/technicalArticles/Interviews/bloch\\\_effective\\\_08\\\_qa.html).

**Frakturfreund** · [22.04.2010 01:18](#comment-100)

Seit Java 5 ist das »Double-checked locking« einfach nicht mehr die beste Möglichkeit, ein sicheres Singelton zu realisieren – am sichersten (und mit dem geringsten Schreibaufwand) ist der \[Weg über ein Enum\](http://www.florianbuetow.com/javahints/?p=281). Diese Idee sieht auf den ersten Blick zwar etwas merkwürdig (bzw. zweckentfremdet) aus, ist aber auch lt. »Effectice Java« die beste Möglichkeit.

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [1.6.0_20 (6u20) Update](https://tutego.de/blog/javainsel/2010/04/1-6-0_20-6u20-update.md)
- Next: [Version 1.3.3 der Google App Engine](https://tutego.de/blog/javainsel/2010/04/version-1-3-3-der-google-app-engine.md)
