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?