Watki a metody statyczne

Watki a metody statyczne
korushiku
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
mam problem z pewnym kawalkiem kodu.

Kopiuj
        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:

Kopiuj
przed konstruktorem
konstruktor
po konstruktorze

tymczasem dostaje mniej wiecej taki output:

Kopiuj
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?

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.