| Inhaltsverzeichnis | 4 |
---|
| Vorwort | 12 |
---|
| A – Java-Memory-Modell | 14 |
---|
| Kapitel 1 – Einführung in das Java-Memory-Modell | 18 |
---|
| 1.1 Atomare Zugriffe | 20 |
| 1.2 Sequential Consistency | 21 |
| 1.3 Sichtbarkeitsregeln für volatile-Variablen | 22 |
| 1.4 Sichtbarkeitsregeln für Synchronisation | 23 |
| 1.5 Zusammenfassung | 25 |
| Kapitel 2 – Das Java-Memory-Modell im Überblick | 26 |
---|
| 2.1 Das Java-Memory-Modell | 27 |
| 2.2 Sichtbarkeitsregeln im JMM | 29 |
| 2.3 Zusammenfassung | 33 |
| Kapitel 3 – Die Kosten der Synchronisation | 34 |
---|
| 3.1 Performanceeinbußen durch Synchronisation | 35 |
| 3.2 Skalierbarkeitseinbußen durch Synchronisation | 36 |
| 3.3 Sequenzialisierung bekämpfen | 41 |
| 3.4 Zusammenfassung | 44 |
| Kapitel 4 – Details zu volatile-Variablen | 46 |
---|
| 4.1 volatile als Alternative zur Synchronisation | 46 |
| 4.2 Missverständnis | 49 |
| 4.3 Kosten von volatile | 51 |
| 4.4 Speichereffekte von volatile auf andere Variablen | 52 |
| 4.5 volatile-Referenzvariablen | 55 |
| 4.6 Zusammenfassung | 59 |
| Kapitel 5 – volatile und das Double-Check-Idiom | 60 |
---|
| 5.1 Ausgangssituation | 60 |
| 5.2 Das Double-Check-Idiom | 61 |
| 5.3 Optimierung à la Bloch | 64 |
| 5.4 Single-Check-Idiome | 67 |
| 5.5 Zusammenfassung | 71 |
| Kapitel 6 – Regeln für die Verwendung von volatile | 72 |
---|
| 6.1 Effekte von Synchronisation | 72 |
| 6.2 Regeln für den Einsatz von volatile | 74 |
| 6.3 Beispiele für den erfolgreichen Einsatz von volatile | 76 |
| 6.4 Zusammenfassung | 83 |
| Kapitel 7 – Die Initialisation-Safety-Garantie | 84 |
---|
| 7.1 Das Racy-Single-Check-Idiom | 84 |
| 7.2 Anforderungen an unveränderliche | 87 |
| 7.3 Speichereffekte im Zusammenhang mit final-Feldern | 88 |
| 7.4 Unterschiede zu volatile | 97 |
| 7.5 final Variablen vs. final Felder | 97 |
| 7.6 Zusammenfassung | 99 |
| Kapitel 8 – Über die Gefahren allzu aggressiver Optimierungen | 100 |
---|
| 8.1 Racy-Single-Check und unveränderlichen Typen | 100 |
| 8.2 Genereller Verzicht auf Synchronisation/volatile bei unveränderlichen Typen? | 102 |
| 8.3 Race Conditions bei der Konstruktion von Objekten | 105 |
| 8.4 Zusammenfassung | 110 |
| Kapitel 9 – Atomic Scalars | 112 |
---|
| 9.1 Ein Thread-sicherer Zähler mit Synchronisation | 113 |
| 9.2 CAS - Compare and Swap | 114 |
| 9.3 Ein Thread-sicherer Zähler unter Verwendung von atomaren Variablen | 115 |
| 9.4 Zusammenfassung | 117 |
| Kapitel 10 – Atomare Referenzvar
|