我正在使用泛型创建对象的 ArrayList。每个线程都会计算对象并将其存储在数组列表中。
但是,当查看静态且易失的 ArrayList 时,所有对象属性都设置为 null。我的想法与垃圾收集器删除线程中的实例有关,因此一旦线程完成,就不会引用它们。
任何帮助真的会有帮助吗?
最佳答案
垃圾收集器不会从数组列表中删除实例1。这不是问题所在。
问题很可能是您在没有正确同步的情况下访问和更新数组列表对象。如果同步不正确,一个线程将不会总是看到另一个线程所做的更改。
声明对 ArrayList 对象的引用只能保证线程将看到相同的列表对象引用。它不保证列表对象上的操作会发生什么。
<小时/>1 - 假设 GC 运行时数组列表可达,那么所有已正确添加到列表中的元素也将可达。垃圾收集器不会删除任何可达的内容。此外,GC 永远不会访问您的应用程序仍然可以看到的对象并将普通引用更改为 null
。
关于Java ArrayList 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27083770/