Ссылка на Java ArrayList

1

Я создаю ArrayList объектов с использованием дженериков. Каждый поток приходит и вычисляет и сохраняет объект в списке массивов.

Однако при просмотре ArrayList, который является статичным и изменчивым, все атрибуты объекта устанавливаются как null. Мои мысли связаны с сборщиком мусора, который удаляет экземпляры в потоках, поэтому, как только потоки закончатся, ссылки на них отсутствуют.

Любая помощь будет действительно полезна?

  • 2
    Можете ли вы опубликовать пример кода?
  • 0
    Сборщик мусора никогда не «обнуляет» переменную или иным образом не изменяет объект. Значение null было назначено явно или было значением по умолчанию. Теперь использование ArrayList из нескольких потоков по своей сути проблематично - по крайней мере, без использования synchronized .
Показать ещё 2 комментария
Теги:
arraylist
multithreading

1 ответ

2

Сборщик мусора не будет удалять экземпляры 1 из списка массивов. Это не проблема.

Проблема, скорее всего, в том, что вы получаете доступ и обновляете объект списка массивов без правильной синхронизации. Если вы не синхронизируете правильно, один поток не всегда будет видеть изменения, сделанные другим.

Объявление ссылки на объект ArrayList гарантирует, что потоки будут видеть одну и ту же ссылку на объект списка. Он не дает никаких гарантий относительно того, что происходит с операциями над объектом списка.


1 - Предполагая, что список массивов доступен, когда выполняется GC, тогда все элементы, которые были правильно добавлены в список, также будут доступны.Ничто, что доступно, будет удалено сборщиком мусора.Кроме того, GC никогда не попадет в объект, который ваше приложение все еще может видеть и изменить обычные ссылки на null.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню