Я хочу добавить Пакеты читать мой PacketHandler в LinkedList
для сохранить их с:Java LinkedList возвращает тот же элемент мульти нить
Packet toAdd = handler.handlePacket(socket.getInputStream());
synchronized (packetsRead) {
packetsRead.addLast(toAdd);
if (debug) {
System.out.println(packetsRead.getLast().toString());
}
}
и читать их с
synchronized (packetsRead) {
if (packetsRead.size() > 0) {
return packetsRead.pollFirst();
}
}
с методом отладки в первом м Это я могу видеть, что последний элемент никогда не бывает прежним. Поэтому в мой список добавляются разные Пакеты.
Но когда я пытаюсь прочитать их из другого потока, у меня всегда были одни и те же пакеты.
Например, если в моем списке 10 различных пакетов, он будет возвращать первый 10 раз.
Как сделать его потокобезопасным?
Почему бы не использовать поточно-безопасные реализации? http://stackoverflow.com/questions/12043948/thread-safe-linkedlist-alternate-use – kosa
Усилиями я синхронизировал его на одном и том же объекте, я применил его для тестирования. sorry – Michii
Как вы получаете доступ к списку, в котором вы читаете поток - вы уверены, что не делаете копию списка каждый раз, чтобы получить всегда первый элемент? – tomse