我有一个List的共享实例,它由各种线程随机更新(对象只通过线程添加到它)。然后我有一个定时器执行的定时器,它根据一组标准从List中删除记录 - 具体来说,如果记录的时间超过x分钟。我发现,随着我的系统扩展并且线程变得越来越多,清理列表的方法会在迭代时随机抛出异常。我认为这是由于List更新与删除记录之间的争用。在迭代完成时,是防止异常对共享实例进行锁定的最佳方法吗?如果是这样,这样做的负面影响是什么。如果没有,还有其他选择吗?
我确信这是一个非常基本的问题,但我是解决问题的新手。
答案 0 :(得分:2)
我会锁定它。对于添加删除方案,锁的实际价格应该非常低。这听起来像清理过程将是生猪。这一切都取决于它需要清理多少东西。
答案 1 :(得分:0)
是。例外很可能是由于同步问题。你肯定需要锁定它。但是,您也可能希望在系统扩展时控制访问列表的线程数。否则,线程可能会变慢,等待此列表。
答案 2 :(得分:0)
我不认为这说得足够强烈:你必须锁定它。请注意,List不是一个很好的集合对象,删除旧项目的成本为O(n ^ 2)。考虑从旧的List或使用LinkedList创建一个新的List。