Watki a metody statyczne

0

Witam,
mam problem z pewnym kawalkiem kodu.

        while (connection.getState() == Connection.State.Connected) {
            byte type = connection.read();
            if (bufferMessage == null) {
                System.out.println("przed konstruktorem");
                bufferMessage = MessageFactory.createMessage(type);
                System.out.println("po konstruktorze");
            }
            ...
        }
    }

createMessage to statyczna metoda zwracajaca nowa instancje. Spodziewalem sie wyniku w konsoli:

przed konstruktorem
konstruktor
po konstruktorze

tymczasem dostaje mniej wiecej taki output:

przed konstruktorem
po konstruktorze
przed konstruktorem
po konstruktorze
przed konstruktorem
po konstruktorze
przed konstruktorem
konstruktor
po konstruktorze

Nie mam duzego doswiadczenia w programowaniu wielowatkowym i nie wiem dlaczego tak sie dzieje. Dodalem do metody statycznej synchronized, ale to nic nie pomaga. Gdy jednak tworze instancje bez tej metody (bufferMessage = new MyMessage();) kolejnosc jest taka jakiej oczekuje.
W czym jest problem?

0

Wyjście na konsolę jest niesynchronizowane. Jeśli z kilku wątków robisz printlna to wyniki są niedeterministyczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1