Kritisches Lesen!

von Hubert Schmid vom 2012-08-05

In der aktuellen Ausgabe einer verbreiteten, deutsch-sprachigen Computerzeitschrift findet sich ein Artikel über Thread-Programmierung mit Java. Das erste Beispiel im Artikel sieht verkürzt und mit geänderten Namen wie folgt aus und wird im Artikel verwendet, um den Einsatz des Schlüsselworts synchronized zu demonstrieren.

class Foobar { private static int sequence = 0; private final int id; public Foobar() { id = next(); } private int next() { return sequence++; } public int getId() { return id; } }

Amüsant und unterhaltend finde ich, dass der Autor entweder keine Ahnung von dem Thema hat, oder sich zumindest so ungeschickt ausdrückt, dass dieser Eindruck bei mir entsteht. Konkret macht er in wenigen Absätzen die folgenden Aussagen:

Tatsächlich sind alle vier Aussagen falsch. Eine korrekte Synchronisierung erreicht man hingegen, wenn die Methode Foobar.next sowohl mit static als auch synchronized deklariert wird. Die Verwendung des Schlüsselworts synchronized beim Konstruktor ist zwar vorstellbar, wäre aber nur dann hilfreich, wenn bereits aus dem Konstruktor heraus asynchrone Ausführungen mit einer Referenz auf this angestoßen würden, was aufgrund der wenig intuitiven Semantik während der Konstruktion unerwünscht ist. Und ähnlich ist es bei der Deklaration der gesamten Klasse mit synchronized: Die Semantik könnte zwar einfach beschrieben werden, doch wäre sie kaum intuitiv.

Solche Artikel sind keine Ausnahmen und lassen sich aus meiner Sicht auch nicht verhindern – genauso wenig wie entsprechender Humbug in Büchern, im Internet, in Vorträgen und in Vorlesungen. Das Problem liegt vielmehr darin, dass viele Leute sich davon blenden lassen, die Aussagen unkritisch aufnehmen und nicht das notwendige Urteilsvermögen besitzen, um solche Aussagen zu bewerten.

Meine Empfehlung ist daher immer wieder: Seid kritisch, hinterfragt und bewertet! Unabhängig davon ob es sich um eine renommierte oder unbekannte Quelle handelt.