Problemem jest to, że ten kod nie pracuje poprawnie wtedy, gdy jest wiele takich wątków działających w tym samym czasie. Blokada musi być uzyskana w sytuacji, gdy dwa wątki wywołują jednocześnie getHelper(). W przeciwnym razie, oba te wątki mogą albo próbować stworzyć nowy obiekt w tym samym czasie albo jeden z nich dostanie referencję do nie w pełni zainicjowanego obiektu. Problem rozwiązuje się poprzez synchronizację, tak jak w poniższym przykładzie.

//Poprawna, ale kosztowna wersja wielowątkowa class Foo { private Helper helper = null; public synchronized Helper getHelper() { if (helper == null) helper = new Helper(); return helper;

// inne funkcje i metody... }

Tutaj tylko pierwsze wywołanie getHelper() stworzy obiekt. W tym czasie pewna niewielka liczba wątków próbujących uzyskać dostęp musi być zsynchronizowana. Potem (po tej fazie) już wszystkie wątki uzyskają tylko referencję do pola klasy. Synchronizacja metody może obniżyć wydajność o czynnik 100 lub więcej. W tym przypadku ten koszt wydaje się być niepotrzebny, ponieważ inicjalizacja jest dokonywana tylko raz. Uzyskiwanie i zwalnianie blokady za każdym wywołaniem metody, gdy obiekt już jest utworzony, wydaje się być niepotrzebna.