Nie mogę dodać elementu do LinkedBlockingQueue

0

Mam sobie

LinkedBlockingQueue<Message> queue = new LinkedBlockingQueue<>();

Ten Message, to mój Message. Po Message dziedziczy 'SimpleMessage'.
W pewnym momencie kodu mam:

addMessage(Message message){
   boolean success = false;
   ... //jakieś sprawdzenia
   success = queue.offer(message);
   ...
}

I teraz tak... Sprawdzam to nawet w debuggerze, metoda na pewno dostaje obiekt klasy SimpleMessage i ten obiekt na pewno jest jeszcze pod zmienną message w momencie wywołania 'queue.offer(message);'. Nie ma nawet, gdzie zniknąć, bo sprawdzenia, to tylko ify i logowanie (które wyraźnie zapisują, że ten obiekt tam jest).
Metoda zwraca true, inny wątek się wybudza, żeby wyciągnąć dane z kolejki i ... wyciąga null.
Sprawdzałem w debuggerze i zaraz po dodaniu do kolejki, jej zawartość ciągle przedstawia się jako [], pierwszy element to null, ostatni to null i linki "next" w pierwszym i ostatnim, to ciągle null.
Próbowałem też metody AbstactQueue.add(..); i ciągle to samo.
Kolejka na początku jest pusta, metoda dodająca informuje, że dodała, ale obiektu nie ma. Ktoś ma pomysł, co się stało?

Testowane na Ubuntu 64bit, Java od Oracle, wersja 1.7.0_40. Resetowałem komputer i nie pomogło. Chyba skończyły mi się pomysły...

0
  1. Co zwraca ci .offer()? True?
  2. Może debuger kłamie? ;)
0

offer zwraca "true", a logger linijkę przed dodaniem i linijkę po dodaniu drukuje zawartość obiektu message (przeciążony przeze mnie toString() i dane konkretnego obiektu). Spróbowałem na innym komputerze, z innym OS (Win 8) i ciągle mam to samo.

0

Zmontuj minimalny kod który pokazuje ten efekt ;)

0

Przy tworzeniu minimalnego kodu znalazłem błąd. Okazało się, że obiekt dobrze się do kolejki wrzuca, ale źle się z niej wyciąga. Samo wyciąganie było OK i następowało natychmiast (dlatego w debuggerze nie widziałem nic w kolejce po dodaniu), ale później dodawało obiekt do mapy, w której się już nie pojawiał. Haczyk polegał na tym, że mapa nie istniała (inny wątek miął ją robić), a jakiś inteligent walnął kilka metod wyżej "catch (Exception e){}" i wyjątek NPE szlag trafiał.
Dzięki za próbę pomocy, temat do zamknięcia.

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