Thread-Safety

Thread-Safety bedeutet: Code funktioniert korrekt, auch wenn mehrere Threads ihn gleichzeitig ausführen.

Wichtig bei @Singleton und überall, wo geteilter State existiert.

I. Wann ist Code NICHT thread-safe?


private int count = 0;

public int increment() {
    return ++count;   // ❌ nicht thread-safe!
}

count++ ist eigentlich 3 Operationen: read, increment, write. Zwei Threads können sich überholen.

II. Lösungen


Lösung Wann
AtomicInteger / AtomicLong einfache Zähler
synchronized komplexere Blöcke
ReentrantLock flexibel
Immutable Objects am einfachsten
ConcurrentHashMap thread-safe Map

III. Bei EJBs


Bean-Typ Thread-Safe?
@Stateless Container synchronisiert (Pool)
@Stateful 1 Thread pro Instanz
@Singleton Deine Sache!