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! |